Remote management system

ABSTRACT

A system comprising a first host bus adapter coupled to a first Fibre Channel port and a remote manager associated with a second host bus adapter coupled to a second Fibre Channel port. The remote manager is operable to form a command to be sent by the second host bus adapter to the first host bus adapter via a Common Transport layer of a Fibre Channel.

BACKGROUND

[0001] A Storage Area Network (SAN) may comprise a plurality of servers, storage devices and switches. Each server may have a host bus adapter (also called an “HBA” or “adapter”) that couples the server to the network. HBAs installed throughout the SAN may require configuration and maintenance operations. These operations have conventionally been performed on each node of the SAN independently.

[0002] As SANs become larger and more complex, the number of host servers and adapters on a given SAN may increase and their locations may be physically diverse. Large, complex SANs can be expensive and time-consuming to install and maintain. A SAN administrator's job of managing multiple servers, HBAs, ports (access points of devices to a network), switches, and storage arrays may be more demanding. For example, the SAN administrator must update HBA firmware locally at each host server where the HBA is installed.

SUMMARY

[0003] One aspect of the invention relates to a remote management system that allows an administrator at a designated location to manage a plurality of servers, HBAs (e.g., Fibre Channel and/or iSCSI) and ports of a storage area network (SAN) The remote management system may comprise a remote management client (RMC) software at a remote manager server and a remote management agent (RMA) software at each target server and/or HBA to be managed.

[0004] The remote management system may remotely query for status information, monitor server, HBA and port activity, diagnose problems and set configurations, settings, options and parameters of servers, HBAs and ports of the SAN.

[0005] The remote management system may provide a number of advantages. The remote management system may greatly simplify a SAN administrator's job because the administrator does not have to manage each HBA locally at the host server where the HBA is installed. By providing a centralized point of HBA management, the remote management system may advantageously reduce the cost of owning and managing a SAN and its components.

[0006] The remote management system may initiate a transfer of new HBA firmware (also called “firmware update”) to any HBA in the SAN. The remote management system may update HBA firmware in real-time and without affecting the SAN performance.

[0007] The remote management system may distribute drivers and/or driver updates to remote servers.

[0008] The remote management system may communicate with and control HBAs by using an “in-band” (on the SAN) communication network, such as Fibre Channel Common Transport (FC-CT) packets over a Fibre Channel network or Internet Protocol (IP) packets over an iSCSI network.

[0009] In addition to or instead of “in-band” communication, the remote management system may use “out-of-band” communication, such as Internet Protocol (IP) packets over an Ethernet, to communicate with and control HBAs on the same SAN or a separate SAN. Out-of-band communication between the remote manager and an HBA may be over a network other than the SAN. Out-of-band communication will enable the system to manage HBAs on multiple SANs, which may not be directly networked with each other.

[0010] The remote management client may have a user interface application that accesses a robust, high-level remote management application program interface (RMAPI). The RMAPI may be distributed to independent software vendors (ISVS) to develop their own management applications and user interfaces. The RMAPI provides ISV applications access to the features of the remote management system.

[0011] The RMAPI may be consistent across a plurality of platforms and operating systems, such as Windows NT/2000, Solaris, AIX, HP-UX and Linux. The RMAPI may be completely generic such that both Fibre Channel adapters and iSCSI adapters may be managed using the same API.

[0012] The RMAPI may access functions in a library for Fibre Channel HBAs (FC-RMAPI) and a library for ISCSI HBAs (ISCIRMAPI). The FC-RMAPI library may comprise FC RMAPI (RM) commands, which correspond to FC Common Transport (CT) commands, which may be sent across the fabric with Input-Output Control (IOCTL) functions.

[0013] Another benefit of the remote management system may be realized as SAN switches continue to evolve into intelligent computers. Switches and other fabric devices may be able to access driver-level Input-Output Control (IOCTL) functions via an IOCTL interface to remotely manage HBAs. For example, switches and other fabric devices may remotely change HBA firmware configurations and options.

[0014] The remote management system may provide extensible Markup Language (XML) support.

[0015] The remote management system may provide a management tool in the form of a Microsoft Management Console (MMC) snap-in.

[0016] One embodiment of the remote management system will not interfere with any third-party software product and will not require any changes to any operating system or application. In-band remote control may be transparent to all hardware devices of the SAN.

[0017] One aspect of the application relates to a system with a Fibre Channel network. The system comprises a first host bus adapter coupled to a first port of the Fibre Channel network; and a remote manager associated with a second host bus adapter coupled to a second port of the Fibre Channel network. The remote manager is operable to send a command from the second host bus adapter to the first host bus adapter via a Common Transport layer of the Fibre Channel network.

[0018] Another aspect relates to a program interface module at a first computer. The program interface module is operable to allow a client software application to access a library of remote management functions. Each remote management function is associated with a Fibre Channel Common Transport command. Each Fibre Channel Common Transport command is configured to command a component of a second computer to perform a function. The second computer is in communication with the first computer via a Fibre Channel network.

[0019] Another aspect relates to a system with an Internet Small Computer System Interface (iSCSI) network. The system comprises a first host bus adapter coupled to a first port of the iSCSI network; and a remote manager associated with a second host bus adapter coupled to a second port of the iSCSI network. The remote manager is operable to send a command from the second host bus adapter to the first host bus adapter in Internet Protocol packets via the iSCSI network.

[0020] Another aspect relates to a data structure comprising an attribute type field, an attribute length field, and an attribute datum field. The data structure describes an attribute of a component in a storage area network, the attribute data structure being configured to be transmitted from a first node to a second node of a Fibre Channel network via a Fibre Channel Common Transport layer.

[0021] Another aspect relates to a Fibre Channel Common Transport command configured to be sent from a first Fibre Channel port to a second Fibre Channel port. The Fibre Channel Common Transport command instructs a component in communication with the second Fibre Channel port to perform a function.

[0022] Another aspect relates to a command structure configured to be sent from a first computer at a first Fibre Channel port to a second computer at a second Fibre Channel port. The command structure comprises an object port address that specifies where the command is to be sent; a proxy port address that specifies a backup address where the command is to be sent; a pointer; and a return value.

[0023] Another aspect relates to a repository comprising a disk-based directory. The repository is operable to store a file to be transferred from a first computer server to a computer second server via a plurality of Fibre Channel Command Transport packets.

[0024] Another aspect relates to a repository comprising a disk-based directory at a second computer. The repository is operable to store a file transferred from a first computer to the second computer via a plurality of Fibre Channel Command Transport packets.

[0025] Another aspect relates to a software module operable to communicate with a host bus adapter driver on a server. The software module comprises a plurality of remote command modules operable to receive commands from remote ports of a storage area network; a kernel operable to dispatch the commands received from the remote command modules to a plurality of protocol managers; and a plurality of management service modules operable to execute the commands.

[0026] Another aspect relates to a method of sending a command to a device in a Fibre Channel network. The method comprises receiving a user command at a first device in the Fibre Channel network; accessing a Fibre Channel Common Transport command library to identify a Fibre Channel Common Transport command that corresponds to the user command; encapsulating the Fibre Channel Common Transport command in a Common Transport Information Unit Request; sending the Common Transport Information Unit Request to a second device via the Fibre Channel network.

[0027] Another aspect relates to a method of sending a command to a device in a Internet Small Computer Interface (iSCSI) network. The method comprises receiving a user command at a first device in the iSCSI network; accessing a iSCSI command library to identify an iSCSI command that corresponds to the user command; and sending the iSCSI command to a second device via the iSCSI network.

[0028] Another aspect relates to a method of transferring a firmware file to a remote host bus adapter. The method comprises importing a firmware file to a local repository; verifying that the firmware file is compatible with the remote adapter that is to receive the firmware file; and sending the firmware file to the remote host adapter via a Fibre Channel Common Transport (FC-CT) layer.

[0029] The details of one or more embodiments are set forth in the accompanying drawings and the description below. Other features, objects, and advantages will be apparent from the description and drawings, and from the claims.

DESCRIPTION OF DRAWINGS

[0030]FIG. 1 illustrates one embodiment of a storage area network (SAN).

[0031] FIGS. 2A-2B illustrate one embodiment of a remote management client (RMC) and one or more remote management agents (RMAs) in the SAN of FIG. 1.

[0032]FIG. 3 is a block diagram of one embodiment of the RMC in FIGS. 1 and 2.

[0033]FIG. 4 illustrates one embodiment of a Fibre Channel, a host bus adapter (HBA), the remote management agent (RMA) and an Ethernet.

[0034]FIG. 5 illustrates a method of using the RMA of FIG. 4.

[0035]FIG. 6 is a screen shot of one embodiment of an application window that may be provided by the client at the remote manager.

[0036]FIG. 7 is a screen shot of one embodiment of another application window that may be provided by the client at the remote manager.

[0037]FIG. 8 is a screen shot of one embodiment of another application window that may be provided by the client at the remote manager.

[0038]FIG. 9 is a screen shot of one embodiment of another application window that may be provided by the client at the remote manager.

[0039]FIG. 10 is a screen shot of one embodiment of another application window that may be provided by the client at the remote manager.

[0040]FIG. 11 is a screen shot of one embodiment of another application window that may be provided by the client at the remote manager.

[0041]FIG. 12 is a screen shot of one embodiment of another application window that may be provided by the client at the remote manager.

[0042]FIG. 13 is a screen shot of one embodiment of another application window that may be provided by the client at the remote manager.

[0043]FIG. 14 is a screen shot of one embodiment of another application window that may be provided by the client at the remote manager.

[0044]FIG. 15A illustrates one embodiment of major RMAPI function categories, individual RMAPI functions and their associated FC-CT commands.

[0045]FIG. 15B illustrates examples of HBAAPI functions and RMAPI functions.

[0046] FIGS. 16A-16B illustrate examples of server attributes and their formats.

[0047]FIGS. 17A and 17B illustrate examples of HBA attributes and their formats.

[0048]FIG. 18 illustrates examples of port attributes and their formats.

[0049]FIG. 19 illustrates examples of port statistics and their formats.

[0050]FIG. 20 illustrates examples of port FCP attributes.

[0051]FIG. 21 illustrates examples of FC-3 management attributes.

[0052]FIG. 22 illustrates a method of downloading firmware to a remote server.

[0053] FIGS. 23A-23E illustrate one embodiment of a software resource attribute and its fields.

[0054]FIG. 24 illustrates examples of vendor-unique FC-CT command codes.

[0055] FIGS. 25-27 illustrate examples of Common Transport (CT) Command Block formats.

[0056]FIG. 28 lists examples of CT Vendor-Unique Reject Reason Codes.

[0057] FIGS. 29A-29B lists examples of CT vendor-unique reason codes for command-specific errors.

[0058]FIG. 30 illustrates one embodiment of a CT Reject Additional Information field.

[0059]FIG. 31 illustrates one embodiment of a Reject CT_IU Additional Information field.

[0060]FIG. 32 illustrates one embodiment of a general format that may be used for all port statistics.

[0061]FIG. 33 illustrates one embodiment of a Port Statistics Block entry.

[0062]FIG. 34 illustrates one embodiment of a Software Resource Descriptor (SRD).

[0063]FIG. 35 illustrates one embodiment of a Software Resource Block (SRB).

[0064] FIGS. 36A-36B illustrate examples of a Get Server Attributes Command and a Get Server Attributes Response.

[0065] FIGS. 37A-37B illustrate examples of a Get HBA Attributes Command and a Get HBA Attributes Response.

[0066] FIGS. 38A-38B illustrate examples of a Get Port Attributes Command and a Get Port Attributes Response.

[0067] FIGS. 39A-39B illustrate examples of a Get Driver Attributes Command and a Get Driver Attributes Response.

[0068] FIGS. 40A-40B illustrate examples of a Get Port Statistics Command and a Get Port Statistics Response.

[0069] FIGS. 41A-41B illustrate examples of a Set Server Attributes Command and a Set Server Attributes Response.

[0070] FIGS. 42A-42B illustrate examples of a Set HBA Attributes Command and a Set HBA Attributes Response.

[0071] FIGS. 43A-43B illustrate examples of a Set Port Attributes Command and a Set Port Attributes Response.

[0072] FIGS. 44A-44B illustrate examples of a Set Driver Attributes Command and a Set Driver Attributes Response.

[0073] FIGS. 45A-45B illustrate examples of a Reset Port Statistics Command and a Reset Port Statistics Response.

[0074] FIGS. 46A-46B illustrate examples of a Verify Firmware Command and a Verify Firmware Response.

[0075] FIGS. 47A-47B illustrate examples of a Download Firmware Command and a Download Firmware Response.

[0076] FIGS. 48A-48B illustrate examples of an Upgrade Firmware Command and an Upgrade Firmware Response.

[0077] FIGS. 49A-49C illustrate examples of a Reset HBA Command, a Reset HBA Response and Reset HBA Command details.

[0078] FIGS. 50A-50C illustrate examples of a Run HBA Diagnostic Command, a Run HBA Diagnostic Response and Run HBA Diagnostic command details.

[0079] FIGS. 51A-51C illustrate examples of a Get Remote Resource List Command, a Get Remote Resource List Response and Get Remote Resource List command details.

[0080] FIGS. 52A-52B illustrate examples of a Get Remote Resource Info Command and a Get Remote Resource Info Response.

[0081] FIGS. 53A-53C illustrate examples of a Send Software Resource Command, a Send Software Resource Response and Send Software Resource Command Details.

[0082] FIGS. 54A-54C illustrate examples of a Delete Remote Resource Command, a Delete Remote Resource Response and Delete Remote Resource Command Details.

[0083] FIGS. 55A-55C illustrate examples of a Rename Remote Resource Command, a Rename Remote Resource Response and Rename Remote Resource Command Details.

[0084]FIGS. 56A and 56B illustrate examples of a Test Transmit and Receive Command and a Test Transmit and Receive Response.

[0085] FIGS. 57A-57C illustrate examples of Query HBA Response details, a Query HBA Command and a Query HBA Response.

[0086] Like reference symbols in the various drawings indicate like elements.

DETAILED DESCRIPTION

[0087]FIG. 1 illustrates one embodiment of a storage area network (SAN) 50. An enterprise SAN 50 is commonly a large and complex network that may include hundreds of nodes, such as nodes A-O in FIG. 1. The nodes A-O of the SAN 50 may be coupled to each other with fabric devices 150A-150C (e.g., Fibre Channel (FC) switches) and one or more FC hubs 160. The terms “fabric” and “switch” may be used synonymously herein. In a discussion of Fibre Channel devices, the term “switch” implies a “fabric device,” such as a switch manufactured by Brocade or McData. These switches are not to be confused with an “IP switch” or “router device” such as one manufactured by Cisco. A Fibre Channel fabric device is an integral component of a SAN 50. An IP switch or router may exist on a separate Ethernet network, but is not a functional component of a Fibre Channel SAN.

[0088] The SAN 50 may use a Fibre Channel or iSCSI network. Other types of networks may be implemented. The description below may use the Fibre Channel as a primary example.

[0089] Nodes A-O in the SAN 50 may comprise storage arrays 140A, 140B or computer systems/servers with installed Fibre Channel or iSCSI HBAs 112A-112C (FIG. 2A) that connect to fabric devices 150A-C. Other embodiments of the SAN 50 may have other components in addition to or instead of the components in FIG. 1, such as additional nodes, storage devices and fabric devices.

[0090] Servers and HBAs

[0091]FIG. 2A illustrates a remote manager computer/server 103, one or more host/target servers or computer systems 110A, 110B and storage arrays 140A, 140B coupled to ports of the fabric 100. The fabric 100 may be coupled to one or more switches, hubs and/or routers. In FIG. 2A, host servers 110A, 110B communicate with the fabric 100 via host bus adapters (HBAs) 112A, 112B, 112C, such as Fibre Channel HBAs and iSCSI HBAs made by Emulex Corporation of Costa Mesa, Calif. The HBAs 112A-112C are operable to execute remote management agent (RMA) software 104A, 104B, and 104C.

[0092] Each host server 110 may have more than one HBA. For example, host server 110B may have a target/object HBA 112B (intended target of a Common Transport (CT) management request) and a proxy HBA 112C. In situations where the object HBA 112B is not available, a CT Request may be sent to the proxy HBA 112C on the same server 110B.

[0093] Each HBA 112 (FIG. 2A) installed on nodes A-O throughout the SAN 50 may require configuration and maintenance operations.

[0094] FIGS. 2A-2B illustrate one embodiment of a remote management client (RMC) 102 and one or more remote management agents (RMAs) 104A, 104B in the SAN 50 of FIG. 1. The RMC 102 and RMAs 104 are collections of software components that allow a single point (server 103) in the SAN 50 to manage HBAs and other components. This single point of management (server 103) executes the RMC application 102, which provides management functions. Other nodes with installed HBAs 112A, 112B, 112C run RMA applications 104A, 104B, 104C, which respond to management requests from the RMC application 102. The RMC application 102 may issue RMC management commands to remote HBAs 112A, 112B over the Fibre Channel fabric 100.

[0095] In FIG. 2B, the RMC application 102 places a command on the Fibre Channel fabric 100 via an interface provided by a device driver 216A. When the remote node B receives the command, the device driver 216B on the remote node B passes the command to the RMA 104.

[0096] The RMC 102 and RMA 104 together may be referred to as a remote management utility (RMU). The RMC 102 and RMA 104 may form a client/server architectural model.

[0097] Remote Manager

[0098] In FIG. 2A, the remote manager computer/server 103 may have an HBA 112D, an RMC 102 and an RMA 104D. The remote manager 103 may be a computer server like the host servers 110A, 110B. In fact, any server 110 in the SAN 50 may load and execute a RMC software 102 and operate as a remote manager 103.

[0099] The RMC 102 may have an application 302 with a graphical user interface (GUI) (FIG. 3 and FIGS. 6-14) for an administrator to monitor local and remote HBAs 112D, 112A, 112B, 112C and issue commands. For example, the remote manager 103 may transfer/copy new HBA firmware versions or updates to any or all HBAs 112D, 112A, 112B, 112C in the same SAN 50.

[0100] The remote management client 102 and/or agent 104 may be user-installed. A bundled remote management package, including the appropriate driver, may be made available for download on the Emulex web site for Emulex's customers. The remote management components may include an install process, which will install an HBA driver and all required remote manager software, and a “readme” file describing the install process and operational functionality. The HBA driver 216 may be installed separately from the “HBAnyware” client 102 and agent 104.

[0101] Remote Management Client (RMC)

[0102] The remote management client (RMC) 102 comprises a set of software components that may provide remote management of both Fibre Channel and/or iSCSI HBAs. The RMC 102 may reside on any machine or system with a Fibre Channel or iSCSI HBA.

[0103]FIG. 3 is a block diagram of one embodiment of the remote management client 102 in FIGS. 1, 2A and 2B and other related software, such as a web browser 312, a Microsoft management console (MMC) 306, a Java native interface (JNI) 319 and an Ethernet network interface card (NIC) 334. The remote management client 102 in FIG. 3 may comprise some or all of the following: a Simple Network Management Protocol (SNMP) application 304, a native application 310, an XML application 314, a Java application 307, an MMC plug-in 308, an XML parser 316, an XML page server 320, a Java XML parser 318, a remote management application program interface (RMAPI) 304, an HBAAPI 324, one or more HBA-specific remote management libraries 306, an IP-based FC-CT handler 328, an Ethernet IOCTL interface 330, an in-band FC-CT handler 308 and an FC driver/IOCTL interface 332. The HBA-specific remote management libraries 306 may comprise a RMAPI for FC HBAs 325B and/or a RMAPI for iSCSI HBAs 325A.

[0104] Other embodiments of the remote management client 102 may comprise less than all of the components in FIG. 3. Other embodiments of the RMC 102 may comprise other components in addition to or instead of the components shown in FIG. 3.

[0105] The RMC 102 (also called “client 102”) may enable top-level applications 304, 310, 312, 314, 307 to access functions in the remote management libraries 326 from a console command prompt. The client 102 may be intended for use in scripted operations from within shell scripts, batch files or the specific platform equivalent.

[0106] For example, a Command Line Interface (CLI) client is a “console application,” which has a text interface, as opposed to a Graphical User Interface (GUI). In one embodiment, three client applications are delivered with an HBAnyware client 102: a Windows GUI application, a Java GUI application, and a CLI application called HBACMD. A first parameter to a CLI client command may be a requested operation. Upon completion of the specified operation, the user at the remote manager 103 may be returned to the command prompt. Some operations described below may retrieve information about an entity on the SAN 50, and display that information on the manager console 103 (see FIGS. 6-14).

[0107] CLI client commands may have one or more additional parameters that specify the nature of the command. A parameter used by many HBACMD commands specifies the World Wide Node Name of the HBA that is the target of the command. For example, the command:

[0108] C:\>HBACMD PORTATTRIB 10:00:00:00:c9:20:20:20

[0109] will display port attributes for the HBA with the specified World Wide Node Name (WWNN).

[0110] Remote Management API (RMAPI)

[0111] Third party independent software developers/vendors (ISV), such as Veritas, may write their own management applications, represented by one of the top-level applications 304, 310, 312, 314, 307, to access the externally visible RMAPI 322. The RMAPI 322 provides an interface to manage local and remote host bus adapters 112A-112D (FIG. 2A). Even though the RMAPI 322 is referred to as a “remote” management API, the API 322 may be equally capable of managing local adapters.

[0112] The RMAPI 322 may be a robust remote management interface that is consistent across different platforms and operating systems, such as Windows NT/2000, Solaris, AIX, HP-UX and Linux, for example, via the Java application 307, and applicable to any HBA in any environment.

[0113] The RMAPI 322 may be dynamically loaded by any application 310, 312, 314 or 307 on the remote manager computer 103 that wishes to perform remote management.

[0114] In a Microsoft Windows environment, the RMAPI 322 may exist as a Windows dynamic link library (DLL). Under the various Unix environments, the RMAPI 322 may be in the form of a shared object library.

[0115] The RMAPI 322 may be multi-threaded, which allows more than one application to access the libraries 326 concurrently.

[0116] The RMAPI 322 may provide the following broad categories of management RMAPI functions:

[0117] Load a specified firmware image (file) to local and remote HBAs 112A-112D with specified WWNNs; the file can be any file accessible to the client 102 (see FIGS. 13-14);

[0118] Retrieve, view and modify driver parameters of local and remote HBAs 112A-112D (see FIGS. 9-10);

[0119] Manage and load remote drivers;

[0120] Manage, maintain and add persistent bindings; a persistent binding is a relationship that a SAN administrator establishes between a physical device on the SAN 50 and a logical device as seen by the operating system; essentially, persistent bindings exist as a table of data that match each physical SAN device to a logical OS device;

[0121] Reset one or more HBAs 112A-112D with one or more specified World Wide Port Names; and

[0122] Set or change IEEE addresses of HBAs 112A-112D.

[0123] Specific functions of the RMAPI 322 or the client 102 may include:

[0124] Run an HBA diagnostic;

[0125] Display a list of discovered manageable HBAs 112A-112D and their World Wide Node Names (see FIGS. 6 and 7);

[0126] Display and set a list of HBA attributes/parameters for the local or remote HBA 112 with each specified World Wide Node Name (see FIGS. 9-10);

[0127] Display and set a list of port attributes/parameters for the local or remote port with a specified World Wide Port Name (see FIG. 11);

[0128] Display a list of port statistics for the port with a specified World Wide Port Name (see FIG. 12);

[0129] Reset the port statistics for the specified port to zero;

[0130] Display and set a list of attributes for a specified server (see FIG. 8);

[0131] Display a list of mapped targets for the port with each specified World Wide Port Name (see FIGS. 6 and 11); and

[0132] Display a list of device driver attributes for the port with the specified World Wide Port Name (see FIGS. 9-10).

[0133]FIG. 15A illustrates one embodiment of major RMAPI function categories, individual RMAPI functions and their associated FC-CT commands. FIG. 15B illustrates examples of HBAAPI functions and RMAPI functions.

[0134] Many of the functions performed by the client 102 may be Fibre Device Management Interface (FDMI) functions. While the client 102 will implement the Get_HBA_Attributes function, for example, the client 102 may use a vendor-unique GS_Type value of 0x0A, not the standard GS_Type=1xFA specified by the FC-GS Specification for the FD_MI Management service. FC-GS stands for Fibre Channel Generic Services, which is an industry standard specification well known to the Fibre Channel community. Also, the FC-CT Command Code may not necessarily be 1x0101.

[0135] Other functions may be unique, and no real model exists in the Fibre Device Management Interface (FDMI) or in the Fibre Channel Methodologies for Interconnects (FC-MI). One example is the download firmware operation described below.

[0136] The attributes of the RMAPI functions may include all standard HBAAPI functions (see FIG. 15B and Appendix B), as well as additional functions described below. The RMAPI 322 (see pages 6-25 of Appendix A) is intended to migrate the local capabilities provided by HBAAPI (see Appendix B) to include both local and remote access. Thus, HBAAPI functions may represent a subset of RMAPI functions.

[0137] HBA-Specific RMAPI Libraries

[0138] In one embodiment, the RMAPI 322 may dynamically load separate RMAPI libraries 325A, 325B for specific types of HBAs 112. For example, in FIG. 3, there are two HBA-specific RMAPI libraries: the Fibre Channel RMAPI (FC-RMAPI) 325B and the iSCSI RMAPI (ISCSI-RMAPI) 325A. The RMAPI 322 forwards generic management requests received from an application to an appropriate library 325. These HBA type-specific libraries 325A, 325B may handle the bulk of the processing for a request. Each library 325 may provide programmatic access to management functions.

[0139] The RMAPI 322 may intentionally be similar in some ways to the wrapper library component of the standard HBAAPI architectural paradigm (see Appendix B) developed by SNIA, a committee of companies.

[0140] RMAPI Library for FC HBAs (FC-RMAPI)

[0141] The FC-RMAPI 325B may be dynamically loaded by any application, such as one of the applications 310, 312, 314 or 307, that wishes to perform remote management. The FC-RMAPI 325B may combine the core functionality of the SNIA HBAAPI, an Emulex LightPulse utility and a set of new functions into a single, cohesive Application Program Interface. Any HBA 112, located either locally or remotely, may be manageable via the FC-RMAPI 325B.

[0142] The FC-RMAPI library 325B accepts management requests from the RMAPI 322 and prepares the requests for delivery to the appropriate remote or local HBA 112. The FC-RMAPI 325B may use the Common Transport (CT) protocol layer of the Fibre Channel Generic Services (FC-GS) to communicate management requests to HBAs 112A-112D.

[0143] FC-CT Commands

[0144] The FC-RMAPI 325B is operable to map an RMAPI management function into a corresponding FC-CT command, as shown in FIG. 15A. In some cases, there may be a one-to-one correspondence between an RMAPI function and an FC-CT command.

[0145] A specific set of extended FC-CT commands may be created for the FC-RMAPI 325B. FIG. 24 illustrates examples of vendor-unique FC-CT Command codes.

[0146] A standard CT command set may be extended with commands that perform the following broad categories of functions:

[0147] Send/download a file resource (e.g., a firmware image) to an HBA (see FIGS. 13-14);

[0148] Get remote file resources;

[0149] Set boot BIOS state; enable/disable boot BIOS

[0150] Manage HBA files, i.e., firmware files, driver files, library files;

[0151] Retrieve and modify HBA attributes, port attributes & statistics and driver parameters (see FIGS. 9-12);

[0152] Initiate device-specific actions such as firmware file download (see FIGS. 13-14), driver installation and HBA reset; and

[0153] Retrieve HBAAPI-compatible information from remote HBAs.

[0154] The device driver 332 in FIG. 3 puts an FC-CT command packet in a Common Transport Information Unit (CT_IU) Request to be transmitted via the fabric 100. A fabric device is not an absolutely required component of a SAN 50. HBAnyware commands are directed to remote HBAs, and they may pass through a fabric device in route. The abbreviation for Common Transport Information Unit is specifically called out in Fibre Channel standards as “CT_IU,” which may also be referred to as “CT IU,” “CTIU,” and “CT-IU” herein. Thus, there are three levels of commands/functions/routines: (a) RMAPI functions; (b) FC_CT commands; and (c) CT_IU Requests placed in IOCTL functions/routines.

[0155] As stated above, a software company may develop a software application that accesses RMAPI functions via the RMAPI 322 (FIG. 3). On the other hand, a device manufacturer may develop a hardware device, such as a switch or a RAID storage device, for the fabric 100 that does not have access to a software library, but instead uses CT commands directly. Thus, there are two possible interfaces (RMAPI 322 and CT commands) that third party companies may access to perform remote management.

[0156] To accommodate the FC-CT protocol applications described herein, some extensions may be made to the existing CT standard. For example, recipients of FC-CT requests may be well-known fabric addresses, e.g., services such as name service or time service. A Fibre Channel fabric device should provide a set of services to the SAN 50. Other SAN devices may access the features of these services by issuing commands to the well-known Fibre Channel addresses that these services are required to have. The FC-RMAPI 325B may send an FC-CT request to a specific target, such as a specific World Wide Port Name (WWPN) of a device port on the Fibre Channel 100. The intended target address may be inserted into the FC-CT request header.

[0157] FC-CTs and CT_IUs are described in more detail below after other components of the client 102 and agent 104 are described.

[0158] In-Band and/or Out-of-Band Transport

[0159] The CT request may be transportable either in-band over the Fibre Channel, or out-of-band over an Ethernet. For example, the FC-RMAPI layer 325B may have three interfaces directly beneath it: an IP-based FC-CT handler 328 for out-of-band communication, an in-band FC-CT handler 330 and a Fibre Channel device driver/IOCTL interface 332. The FC-RMAPI layer 325B will forward the management request to either the in-band FC-CT handler 330 or the out-of-band IP-based FC-CT handler 328, depending on which transport medium is selected. All remote management requests may be routed through either the out-of-band IP-based FC-CT handler 328 or the in-band FC-CT handler 330. All local HBA management requests may be routed to the Device Driver/IOCTL interface 332.

[0160] The handlers 328, 330 and interfaces 330, 332 may add appropriate headers to command packets, and ensure that the request is sent out over the appropriate medium.

[0161] RMAPI Library for iSCSI HBAs (ISCSI-RMAPI)

[0162] The ISCSI-RMAPI library 325A accepts management requests from the RMAPI 322 and prepares the request for delivery to the appropriate remote entity on an IP storage network, such as the SAN 50.

[0163] The ISCSI-RMAPI library 325A may be able to package up and deliver, in some manner suitable to the iSCSI protocol, the following management commands:

[0164] Retrieve HBA attributes

[0165] Send a file resource (e.g., a firmware image to an HBA 112)

[0166] Download firmware

[0167] Get remote file resources

[0168] Set boot BIOS state

[0169] In-Band FC-CT Handler

[0170] The in-band FC-CT handler 330 is responsible for transmitting in-band FC-CT HBA management requests. The in-band FC-CT handler 330 receives a fully specified FC-CT IU as input and encapsulates it as appropriate for transport over the Fibre Channel 100. The In-band FC-CT handler 330 may have a sole interface entry point, “SendMgmtCommand,” through which the RMAPI 322 passes a FC-CT IU containing the management request, and the location of a buffer in a host memory that will receive the response CT_IU. This may be a synchronous routine that will be blocked until either a response has been received or the request has timed out.

[0171] IP Based FC-CT Handler

[0172] The IP-Based FC-CT handler 328′ is an encapsulation layer for IP-based FC-CT requests. The IP-Based FC-CT handler 328 may take a fully specified FC-CT IU as input and encapsulate it with appropriate IP headers for transport over an Ethernet 130.

[0173] Java Native Interface

[0174] In general, the Java native interface layer 319 gives Java applications 307 the ability to call “native” routines, which are routines coded specifically for the platform type upon which the code is running. Specifically, the Java native interface layer 319 will be used to interface the Java remote management application 307 with the Remote Management API (RMAPI) 322, which may be written in native C code.

[0175] Putting the Java native interface 319 in place may involve no real coding effort per se. Routines in the RMAPI dynamic library (DLL in a Windows environment or a shared object library in a Unix environment) may be mapped to corresponding Java classes. This may be done fairly quickly using some available automated tools plus some modifications.

[0176] XML Page Server

[0177] Web browsers and other XML-aware applications may involve the option of converting information returned from a managed component into an XML compliant document. XML is becoming a widely used standard for exchanging information. Data presented in the form of an XML document has the advantage of being easily integrated into and manipulated by web browsers and other XML aware applications.

[0178] Through the XML page server 320, an application 310, 312, 314 may be able to request an XML document containing, for example, a remote HBA's port statistics table (not shown). The XML page server 320 retrieves the requested data via the RMAPI 322, uses the data fetched from the RMAPI 322 to assemble an XML document, and returns the XML document to the application 310, 312 or 314.

[0179] XML Parser

[0180] One or more XML parsers 316 may be used to interpret XML documents. The XML parser 316 scans the XML document and renders the document in a format usable by an application 310, 312 or 314. Many XML parsers are commonly available.

[0181] Java XML Parser

[0182] If the RMC 102 supports both Java and XML, there may be an XML parser 318 specifically designed for Java applications. There are several widely available XML parsers for Java, such as “XML for Java.”

[0183] XML Application

[0184] An application 314 that can deal with XML documents may be called “XML aware.” For example, a web browser (Netscape or Internet Explorer version 5.0 or later) is an XML-aware application.

[0185] Native Application

[0186] Each platform developed by Emulex may have a native application 310 for local HBA management. Many of the functions provided for remote management may be similar to functions for local management. The native application 310 may extend these local HBA management routines to handle remote operations.

[0187] Java Application

[0188] The Java application 307 may have the advantages of code portability and cross platform maintainability. In addition, the Java application 307 may provide a consistent look and feel across all platforms. “Just-in-time” (JIT) compilers may be used to translate bytecode into machine native code at runtime.

[0189] Repository

[0190] Several FC-RMAPI functions may operate on files located on remote servers 110A, 110B. For example, there may be requirements to send a file (e.g., firmware) from the client 102 to a remote server 110, to change the name of an existing file on a remote server 110, and to retrieve a list of files available on a remote server 110. To perform such operations, the files may be located in pre-defined locations on both local and remote host servers 103, 110A, 110B.

[0191] A special repository 340 (FIG. 3) may be used to hold files transferred between two hosts. The repository 340 may comprise a directory on a disk of a host machine. These files are typically firmware images that are intended to be downloaded to the HBA.

[0192] Before an HBA file can be sent to a remote server 110, the file should first be imported into the local repository 340 since this is the implied starting point for the operation. Similarly, after sending an HBA file to a remote server 110, that file may reside in a repository 450 (FIG. 4) of the targeted remote host server 110.

[0193] An added feature of the repository 340, 450 is that the names of the HBA files contained therein may be such that the files can be managed by the file system of any host application, whether Windows or Unix based. Thus, importing an HBA file into the repository 340, 450 may also include transforming the file name into a format that syntactically acceptable on all OS platforms.

[0194] Remote Downloading with Repositories

[0195]FIG. 22 illustrates a method of downloading firmware or a device driver to a remote server. A firmware file is located on a local host 103, which wishes to copy and install that file to an adapter 112 on a remote server 110.

[0196] In a block 2200, the client 102 imports the HBA file to the local repository 340 (FIG. 3). If the file was imported on behalf of a previous operation, this step is unnecessary.

[0197] In a block 2202, the client 102 verifies that the firmware file is compatible with the remote adapter 112 that is to receive the file. A firmware file may be compatible if the file has a good checksum and its type matches the adapter type.

[0198] In a block 2204, once compatibility has been verified, the file is sent to the remote host 110 on which the target adapter 112 is installed. When the remote host 110 receives the file, the file is copied into a repository 450 of that host 110.

[0199] In a block 2206, the remote server 110 receives a download file command, which directs the remote server 110 to install the firmware file residing in its repository 450 onto the specified adapter 112.

[0200] IOCTL Interface and IOCTL Functions

[0201] The driver IOCTL interface 332 may be transparent to components of the SAN 50, as well as to software that accesses the RMAPI 322. By their very nature, IOCTL interfaces may be vendor unique, non-portable, and do not comply with any industry standard. The HBAnyware client 102 or agent 104 (FIG. 2B) issues IOCTL commands to the driver 216 in order to obtain the information that the client 102 or agent 104 needs, but the RMAPI interface 322 and/or the CT interface 325B abstract this interface 332 from any outside party.

[0202] One or more platform device drivers 332, 400 in FIGS. 3 and 4 may be extended to provide a new set of IOCTL functions. These IOCTL functions/routines may provide a mechanism to transmit management command and responses between separate nodes on a Fibre Channel network, e.g., a response to a remote server 110, and receive a management response from the remote server 110. For example, the IOCTLs may provide a mechanism to inform the device driver 332 at the remote manager client 102 to transmit a CT Request (command) to a remote server agent 104, and to receive a response to that command from the remote server agent 104.

[0203] The nodes communicate with one another using a vendor-unique set of commands transmitted as FC Common Transport sequences. These IOCTLs routines are provided by a device driver or by a diagnostic library closely bound to a device driver.

[0204] The IOCTL command set below allows a node to act as either a client node 103 or a server node 110, or as both a client node and a server node concurrently. A client node may issue a management request at any time, and a server node should be prepared to respond to unsolicited management requests.

[0205] The FC Common Transport provides a request and response mechanism. The client node 103 will issue a management request in the form of a Common Transport Information Unit (CT_IU). This CT_IU will contain the D_ID of the fabric, WWPN of the node 110 that is to receive the request (HBAnyware commands are addressed to a specific HBA 112 using the WWPN of that HBA 112), the request command code, the parameters required by the request, and any associated payload data. Each request will result in either an Accept Response or a Reject Response from the remote node 110 in the form of a CT_IU. The Accept Response IU will contain status data and payload data associated with the command. The Reject Response IU will contain error information indicating the reason for rejection.

[0206] Appendix C lists examples of IOCTL routines/functions that may be used to transport FC-CT commands.

[0207] RegisterForCTEvents

[0208] An IOCTL function called RegisterForCTEvents ((void*)(callback_function)(CTPKT*ctpkt, UINT ctSize)) may register a callback routine, which is dispatched by a device driver 400 (FIG. 4) whenever a remote management command is received by an agent's remote command module 410. The FC-CT remote command module 410A will call this callback routine to enable the receipt of remote commands.

[0209] The RegisterForCTEvents IOCTL may be used by a host server 110 to inform the device driver 400 that the server 110 wants to be informed when an FC-CT Management Command is received, and to provide a mechanism, such as a function call, by which the device driver 400 may do so.

[0210] The in-band FC-CT remote command module 410A registers with the driver 400 via its RegisterForCTEvents IOCTL and provides a callback routine. When the driver 400 receives an incoming command, this callback routine will post the command to the in-band FC-CT remote command module, which posts the command to a RMA kernel command dispatcher or dispatch routing 412.

[0211] The RegisterForCTEvents routine provides a means for the device driver 400 (FIG. 3) to notify the server application (agent) 104 that a management request has arrived. The server application 104 calls the RegisterForCTEvents routine once to register its wish to receive notification of future requests, and specifies a callback routine to be invoked as a means to receive notification.

[0212] After a server application 104 calls RegisterForCTEvents, the driver 400 will invoke the callback routine once for each incoming request. The callback routine receives a pointer to the incoming CT request and a unique tag value assigned by the device driver 400. This tag is used by the driver to associate this command with a subsequent response.

[0213] UnRegisterForCTEvents

[0214] The host server 110 may use another IOCTL function called UnRegisterForCTEvents to unregister for CT events. The UnregisterForCTEvents routine is provided so that a server application 104 can cancel the callback effect of a previous RegisterForCTEvents call.

[0215] SendMgmtCommand and SendMgmtResponse

[0216] Two IOCTL functions for sending management commands and management responses are called SendMgmtCommand (UINT32 adapter, UCHAR*destWWN, CTPKT*cmdpkt, UINT cmdSize, CTPKT* rsppkt, UINT rspsize, UINT32 tag) and SendMgmtResponse (UINT32 adapter, UCHAR*destWWN, CTPKT*rspPkt, UINT rspsize, UINT32 tag). The purpose of SendMgmtCommand is to transmit a management command from the client 102 to an agent 104. The purpose of SendMgmtResponse is to transmit a management response from an agent 104 to the client 102. These commands and responses may be carried via FC-CT.

[0217] The SendMgmtCommand may provide a variant of HBA API's CT pass-through mechanism to send commands that can be targeted to a specific World Wide Port Name. An FC management service 130A at the agent 104 may use this function to respond to remote commands from the client 102.

[0218] The SendMgmtCommand routine is responsible for all tasks required to send the request to the remote destination node 110, including any login activity required to complete the request. The SendMgmtCommand routine may be a blocking synchronous function that does not return a status until the remote node has responded to the request with an Accept or Reject CT_IU. The functionality of the SendMgmtCommand routine may be very similar to the HBA_SendCTPassthru routine provided by the HBA API library.

[0219] The RMAPI 322 will construct a CT_IU structure that contains the management request. The target of the management request is specified by the targetWWN parameter of the SendMgmtCommand routine. The command should be routed by the driver to the adapter 112 specified in the destWWN field of the SendMgmtCommand routine. The GS_Type and GS_Subtype fields of the CT_IU may contain any value, and the routines specified in this document should make no attempt to parse these fields.

[0220] Once the server application 104 has received the management request, it can issue a response using the SendMgmtResponse routine. The sever application 104 constructs a CT_IU structure that contains the response. The parameters to the SendMgmtResponse routine include a pointer to this response structure, and the unique tag of the management request being responded to. This tag allows the device driver 400 to associate the response to the XRI of the incoming request so that it may properly close the exchange.

[0221] The details surrounding the ability of the device driver 400 to invoke a function of a user-mode application 104 may differ greatly from one operating system to the next, and from one device driver model to the next. The code that actually invokes the callback routine may be separate from the device driver 400.

[0222] In the Solaris environment, the libdfc library already provides a separate component that runs in user mode, so support for a callback feature may involve extending this library. The Microsoft driver platforms could be more complex because the port driver or the miniport driver may not have a standard user-mode component. Driver-level support may require the addition of a new software component (such as a kernel mode DLL, a user mode DLL, a filter driver, etc.). These details may be hidden behind the layer of abstraction provided by the FC-CT command set.

[0223] The FC-CT command set may assume that the code implementing the RegisterForCTEvents routine is able to allocate the buffer for incoming management commands and pass a buffer pointer to the callback routine. This model minimizes copying the buffer. In another embodiment, the model may be changed to make the server application 104 responsible for buffer allocation.

[0224] The tag mechanism is intended to allow the device driver 400 to save the exchange context of an incoming management request so that the subsequent response can use this context.

[0225] An effective command timeout mechanism may accommodate lengthy operations (like firmware downloads) and avoid process deadlock situations between separate CPUs.

[0226] The device driver 400 may be able to accommodate concurrent management requests from multiple client applications 102.

[0227] Management Applications that use this FC-CT command set may be required to use Authenticated CT sequences for security purposes. The 88-byte extended preamble specified in FC-GS3 may be used for every sequence transmitted.

[0228] Remote Management Agent (RMA)

[0229] The remote management agents 104A-104D in FIG. 1 may be loaded locally at each server 110, 103. Existing host drivers at the servers 110A, 110B may be modified to support the new relationship between HBAs 112A-112D. For example, a server 110 on the SAN network 100 may receive an unsolicited message from another server 103 and should be able to determine that the message is from a remote manager 103 on the network 100.

[0230]FIG. 4 illustrates one embodiment of the Fibre Channel 102, a host bus adapter (HBA) 112, a device driver/IOCTL interface 400, the remote management agent (RMA) 104 and an Ethernet 130. The remote management agent 104 may comprise a plurality of remote command modules 410A-410D, a remote management agent kernel 418, a plurality of protocol manager modules (PMMs) 420A-420C and a plurality of management services 430A-430D. Other embodiments of the agent 104 may comprise other components instead of or in addition to the components shown in FIG. 4.

[0231] In general, the remote management agent (RMA) 104 is a collection of software components that may receive management commands from remote entities, such as the client 102, and pass those commands to an appropriate management service 130 for execution. The RMA 104 may be installed on any host CPU with a hardware device that is to be remotely managed. The RMA 104 may be a continually executing software component. The RMA 104 may be implemented as a Windows NT Service or as a Unix daemon.

[0232]FIG. 5 illustrates a method of using the RMA 104 of FIG. 4. In a block 500, upon initialization, the RMA kernel 418 attempts to enable one or more communication paths through which the kernel 418 can receive management commands. Each of these paths support the unsolicited receipt of management commands for a single management protocol, such as in-band Fibre Channel Common Transport (FC-CT), out-of-band IP-Based FC-CT or IP-Based SNMP. Since the RMA 104 supports an arbitrary number of paths on which to receive remote commands, the RMA 104 allows (a) simultaneous handling of multiple management protocols or (b) simultaneous handling of a single management protocol from multiple sources.

[0233] Remote Command Modules

[0234] The RMA 104 may receive management commands from multiple paths through dynamically loadable remote command modules (RCMs) 410A-410D. Each remote command module 410 may accept unsolicited remote management commands of a single protocol from a single path. A “path” may be an interface to a device driver 400 or a network interface card that uses Fibre Channel, Ethernet, or some other topology as a method of transmission. A “path” may be an interface to another software component, such as a local application. Each registered RCM 410 is operable to interface with the appropriate hardware and/or software to receive remote management commands.

[0235] For example, one RCM 410A may receive in-band Fibre Channel Common Transport (FC-CT) management commands via a path 402. A separate RCM 410B may receive out-of-band Internet Protocol (IP) FC-CT management commands. To extend the RMA architecture 104 to non-Fibre Channel products, additional RCMs may support a different management protocol and/or access commands on a different path.

[0236] In a block 502, an RCM 410 receives a remote management command and passes the command to the RMA kernel 418. The RMA 104 supports multiple management protocols through the use of multiple dynamically loaded protocol management modules (PMMs) 420A-420C.

[0237] In a block 504, the RMA kernel 418 passes the command to a PMM 420. Conceptually, the RMA kernel 418 may be a command dispatcher.

[0238] Protocol Managers

[0239] One or more PMMs 420A-420C may be loaded to support one or more desired management protocols. Each protocol manager 420 may be a dynamically loadable module that processes commands for a single remote management protocol.

[0240] Each protocol manager 420 may provide complete support for a remote command set (with remote commands such as retrieve parameter) of the protocol manager's specific protocol. Alternatively, each protocol manager 120 may provide a routing service to one or more management services 430, which support a subset of the management command set of the protocol.

[0241] The protocol manager 120 may also provide a generic-services layer that applies to all commands of a specific protocol before routing the command to a management service 130. Such services may include authentication or data compression.

[0242] The FC-CT protocol manager 420A or one of the management services 444 may be responsible for authentication and determine the validity of incoming commands based on content of an extended preamble of a CT header and discard invalid commands. When a CT command is created on the host node 103, authentication data is placed in the extended preamble of the CT_IU that specifies the command. Upon receiving this command, the FC-CT protocol manager 420A or a remote CT server 430 will examine the contents of the extended preamble in order to determine the validity of the authentication data. A command is deemed invalid if the authentication data is deemed invalid. Authentication may be enhanced through the use of a CT Key Server 430C or other security component.

[0243] In a block 506, each PMM 420 is responsible for taking an unsolicited management command of the specific protocol and dispatching the command to an appropriate management service 430. A PMM 420 for a relatively simple management protocol might execute the command itself. A PMM 420 for a more complex management protocol may likely act as a second-layer dispatcher that interprets the command based on its knowledge of the underlying protocol and calls one of several management service modules (MSMs) 430A-430D.

[0244] For example, a FC-CT Protocol PMM 420A may call a FC-CT FC MSM 430A made by Emulex Corporation of Costa Mesa, Calif. The FC-CT Protocol PMM 420A may also call a directory server 430B, a key server 430C or some other CT server 430D.

[0245] Management Services

[0246] In a block 508, each MSM 430 would provide a subset of the management services for its specific protocol. For example, an FC-CT protocol management module 420A may dispatch a CT command to one of several CT services 430A-430D based on the GS_Type and GS_Subtype fields (Emulex-specific or according to the FC-GS standard) in the CT command (Emulex-specific or standard). Several management service modules 430 may be desirable, but one embodiment has at least a single FC MSM 430A that services Emulex-specific remote management CT commands. One embodiment implements management services 444 with a FC-GS standard GS_Type and a vendor-unique GS_Subtype. The specific commands in this implementation are vendor unique. Other embodiments may implement a standard FC_GS service using the command set in the specification (such as a key server 430C or a directory server 430B as mentioned below). Other embodiments may implement vendor unique services using additional vendor unique GS_Subtype values.

[0247] A directory server MSM 430B may also be implemented in order to support discovery in the absence of a fabric switch. Additional protocol management modules 420 (and perhaps additional management service modules 430) could extend the RMA architecture 104 to non-Fibre Channel products.

[0248] RMA Kernel

[0249] The RMA kernel 418 may receive unsolicited management commands from the remote command modules 410A-410D and then dispatch these commands to an appropriate protocol manager 420. The RMA kernel 418 may not know the specific manner by which remote commands are received. The implementation details of a specific protocol may not be relevant to the RMA kernel 418.

[0250] Instead, the RMA kernel 418 may provide a method for one or more remote command modules 410A-410D to register their ability to route incoming remote commands. The RMA kernel 418 may also provide a method for one or more protocol managers 420A-420C to register their ability to accept remote commands. The RMA kernel 418 should have at least one operational protocol manager 420 that receives remote commands from at least one operational remote command module 410.

[0251] Each protocol manager 420 may register with the RMA kernel 418 by providing a callback routine to the RMA kernel 418. The callback routine will be invoked by the RMA kernel 418 when a remote command of the appropriate protocol is received by the driver 400 and passed to the RMA kernel 418. The kernel 418 may provide a routine or function such as:

[0252] RMA_RegisterProtocolManager(void*(callback_function) (parameter-list))

[0253] A “routine” may be generally defined as a named body of code. A “routine” and “function” may be synonymous as used herein. Callback routines and functions may be generally understood by those of ordinary skill in the software art. The concept of a callback routine is that one body of code (e.g., a client GUI application 302) can request that one of its named functions (the “callback routine”) be invoked by another body of code (e.g., the RMA kernel 418) upon the occurrence of some future event (like a device error). In this example, the client GUI application 302 does not have the ability itself to detect a device error, but needs to display a visual indicator of the error. The RMA kernel 418 can detect such an error. Thus, an external body of code (client GUI application 302) “registers” a callback routine with the RMA kernel 418, i.e., the client application 102 passes the address of the callback routine to the RMA kernel 418. When the RMA kernel 418 detects a device error, the RMA kernel 418 uses the address to invoke the callback routine, thus “calling back” to the client application 102. The callback routine concept is used in this area of the RMA kernel 418 to allow protocol managers 420 to register a callback routine that is invoked when the kernel 418 receives a command.

[0254] A parameter to the callback routine may provide a pointer to the incoming remote command (the pointer is an address of a memory location that contains the incoming remote command).

[0255] Each remote command module 410 may register with the RMA kernel 418 in a similar manner, but the callback roles may be reversed. The RMA kernel 418 provides a callback routine to each registered remote command module 410. The callback routine may be invoked by a RCM 410 each time that RCM 410 receives a remote command via its path. The RMA kernel 418 may provide a function such as:

[0256] RMA_RegisterRemoteCommandModule((void*)RMA RCMCallback Function( ))

[0257] When an RCM 410 receives a remote management command via its path, the RCM 410 calls the RMA_RCMCallbackFunction and passes a pointer to the incoming remote management command (the pointer is an address of a memory location that contains the incoming remote management command). The callback routine passes the command to a dispatch routine 412 of the RMA kernel 418.

[0258] The dispatch routine 412 attempts to associate the command with a registered protocol manager 420. If an associated protocol manager 420 is registered with the RMA kernel 418, the dispatch routine 412 will pass the command to the protocol manager 420 via the protocol manager's registered callback routine.

[0259] If the dispatch routine 412 is unable to associate a remote command with a registered protocol, then the remote command is discarded.

[0260] Each protocol manager 420 may be registered with the RMA kernel 418 via the RMA_RegisterProtocolManager routine, and provides a callback routine_to this RMA_RegisterProtocolManager routine.

[0261] GUI Examples

[0262]FIG. 6 is a screen shot of one embodiment of an application window 600 (“HBAnywhere Utility”) that may be provided by the client 102 at the remote manager 103. The window 600 illustrates a File menu 604, a View menu 606, an Adapter menu 608, a Help menu 610, a rediscover button 612, a reset button 614, a host sort button 614, a fabric sort button 616, a local-HBAs-only button 618 and a help icon 620.

[0263] When a user clicks on the rediscover button 612, the client 102 will initiate a discovery process. When a user clicks on the local-HBAs-only button 618, the client 102 restricts discovery to the local host CPU only.

[0264] When a user clicks on the reset button 614, the client 102 causes the selected adapter 112 to be reset.

[0265] When a user clicks on the host sort button 614, the client 102 causes the elements in the node list 650 to be sorted by host name and displays a “Discovered Elements” sub-window 602. For example, the sub-window 602 in FIG. 6 lists four host servers and six adapters. The left side of the window 600 shows four host icons 620A-620D and six adapters 622A-622F. In this example, the first host server 620A in FIG. 6 and the first two adapters 622A-622B are local, while the other servers 620B-620D and adapters 622C-622F are remote.

[0266]FIG. 7 is a screen shot of one embodiment of another application window 700 that may be provided by the client 102 at the remote manager 103. From the window 600 in FIG. 6, if the user clicks on the fabric sort button 616, the client 102 causes the elements in the node list 750 to be sorted by Fabric connection and displays a “Discovered Elements” sub-window 702. In the example of FIG. 7, the sub-window 702 lists one fabric and six adapters. The left side of the window 700 shows six adapters 722A-722F.

[0267]FIG. 8 is a screen shot of one embodiment of another application window 800 that may be provided by the client 102 at the remote manager 103. From the window 600 in FIG. 6, if the user clicks on the first server icon 620A, the client 102 displays a “Host Attributes” sub-window 802. The Host Attributes sub-window 802 may, for example, display the name of the host server and the location of firmware and drivers. The Host Attributes sub-window 802 may be modified to display other host server parameters and conditions.

[0268]FIG. 9 is a screen shot of one embodiment of another application window 900 that may be provided by the client 102 at the remote manager 103. From the window 600 in FIG. 6, if the user clicks on the first adapter icon 622A, the client 102 displays a “General” information sub-window 902 for the first adapter 622A. The sub-window 902 may list adapter information such as, for example, model type 912, adapter description 914, World Wide Node Name (WWNN or Node WWN) 916, driver version 918, firmware version 920, driver name 922 and link status 924. The “General” information sub-window 902 may be modified to display other adapter parameters and conditions.

[0269]FIG. 10 is a screen shot of one embodiment of another application window 1000 that may be provided by the client 102 at the remote manager 103. From the window 900 in FIG. 9, if the user clicks on a “Details” tab 904, the client 102 displays a “Details” information sub-window 1002 for the first adapter 622A. The “Details” information sub-window 1002 may display details such as, for example, Node WWN 1004, Node Symbolic Name 1006, description 1008, driver name 1010, driver version 1012, hardware version 1014, option ROM version 1016, serial number 1018, number of ports 1020, device ID 1022, IEEE address 1024 and Boot BIOS enabled/disabled 1026. The “Details” information sub-window 1002 may be modified to display other adapter details.

[0270]FIG. 11 is a screen shot of one embodiment of another application window 1100 that may be provided by the client 102 at the remote manager 103. From the window 900 in FIG. 9, if the user clicks on a “Port Attributes” tab 906, the client 102 displays a “Port Attributes” information sub-window 1102 for the first adapter 622A. The “Port Attributes” information sub-window 1102 may display port attributes such as, for example, Node WWN 1104, Port WWN 1106, Port Symbolic Name 1108, port FC ID 1110, port type 1112, port state 1114, supported class of service 1116, supported FC types 1118, supported speed 1120, current speed 1122, max frame size 1124, operating system device name 1126, discovered ports 1128 and fabric name 1130. The “Port Attributes” information sub-window 1102 may be modified to display other port attributes.

[0271]FIG. 12 is a screen shot of one embodiment of another application window 1200 that may be provided by the client 102 at the remote manager 103. From the window 900 in FIG. 9, if the user clicks on a “Port Statistics” tab 908, the client 102 displays a “Port Statistics” information sub-window 1202 for the first adapter 622A. The “Port Statistics” information sub-window 1202 may display statistics such as, for example, transmit frames 1204, transmit words 1206, transmit KB count 1208, transmit sequences 1210, LIP count 1212, error frames 1214, link failures 1216, loss of signal 1218, invalid transmit words 1220, ex count original 1222, receive frames 1224, receive words 1226, receive KB count 1228, receive sequences 1230, NOS count 1232, dumped frames 1234, loss of sync 1236, prim sequence prot errors 1238, invalid CRCs 1240, ex count resp 1242. Data throughput counters and error counters at the port may provide some of this information. The “Port Statistics” information sub-window 1202 may be modified to display other port statistics.

[0272]FIG. 13 is a screen shot of one embodiment of another application window 1300 that may be provided by the client 102 at the remote manager 103. From the window 900 in FIG. 9, if the user clicks on a “Firmware” tab 910, the client 102 displays a “Firmware” information sub-window 1302 for the first adapter 622A. The “Firmware” information sub-window 1302 may display a firmware version 1304, a firmware name 1306, an SLI-1 firmware name 1308 and an SLI-2 firmware name 1310. The “firmware” information sub-window 1302 may be modified to display other firmware information.

[0273] Firmware Download

[0274]FIGS. 13 and 14 show a firmware download process. when the user clicks on a “Browse” button 1312, the client 102 displays a “Select Firmware File” window 1314. The user may select a file from a file selection field 1316 or file list 1318 of the “Select Firmware File” window 1314. The user may click on an Open button 1320 and a download button 1322 to download the selected firmware file to the adapter 622A.

[0275]FIG. 14 illustrates the firmware (selected in FIG. 13) download in progress.

[0276] In one embodiment, a remote HBA 112 will not begin erasing a flash memory until the intended firmware image file is present on that HBA 112.

[0277] One desirable functional feature is that the client 102 and/or agents 104A-104D may maintain a repository of firmware image files, which a system administrator can manage remotely at the remote manager 103. For example, if a particular firmware image file is already present in the remote node's repository, the client 102 can download the firmware remotely without re-transmitting the firmware over the link 100.

[0278] FC-RMAPI Information Definitions

[0279] Attributes

[0280] The client 102 and agent 104 use “attributes” of information associated with a particular piece of hardware of the SAN 50, such as a server 110, an HBA 112 or a port. Examples of attributes include Version ID, WWN, Port State, Invalid CRC Count, and SCSI Bus Number. Each attribute entry may comprise an attribute type (e.g., 2 bytes; server, HBA or port), an attribute length (e.g., 2 bytes; identifies total length of entire attribute entry in bytes) and attribute data value (variable length; 4-256 bytes in one configuration). Fill bytes may be added, as specified in FC-MI for attribute values.

[0281] The datum in the attribute may be represented either as a binary number or an ASCII string. If the datum is an ASCII string, the datum should be null-terminated. The representation (binary or ASCII) may be implied by the attribute type code.

[0282] Attribute Blocks

[0283] An “attribute block” may be formed by concatenating one or more attributes, preceded by a count field specifying the number of attributes in the attribute block. Attribute blocks may be constructed in a somewhat similar manner as the standard Fibre Channel Methodologies for Interconnects (FC-MI) Attributes Block, as defined in the FC-MI specification (attached as Appendix B), but there may be some differences from the standard FC-MI Attribute Blocks. For example, various firmware names may be in attribute blocks that are different from the standard FDMI Attribute Blocks.

[0284] Each attribute block may be a fixed-size or variable-sized entity.

[0285] Attribute block types may include a server attributes block type, an HBA attributes block type, a port attributes block type, a port statistic block, a port Fibre Channel Protocol (FCP) mappings/bindings attributes block and an FC-3 management attributes block.

[0286] Each attribute entry in the block specifies a particular attribute associated with the block. Attribute blocks may contain any or all of their applicable attributes, in any order.

[0287] When an application call at the client 102 is made to retrieve an attribute block, the caller should first allocate enough memory at the client 102 to accommodate the request. If the amount of memory allocated is insufficient, an error code will be returned together with the actual size required for the call. When an application encounters this situation, the original memory should be released, a new block allocated using the correct size, and the call re-issued. The maximum block size may be calculated as follows:

[0288] The size of the attribute count entry=4

[0289] Maximum size of attribute=1+4 (size of Type entry+size of length entry=4)

[0290] Maximum size of attribute=2+4 (size of Type entry+size of length entry=4)

[0291] Maximum size of attribute=n+4 (size of Type entry+size of length entry=4), where n is the number of entries in the attribute block.

[0292] In a more compact form: (4+sum of all attribute sizes+4*number of attributes)

[0293] An “attribute table” is a structure containing all attributes for a particular piece of hardware, with each attribute represented as a variable-length field. Attributes may be represented in table format in some of the lower level software modules, but may be represented in block format to application level software.

[0294] An attribute list is formed by concatenating one or more attribute blocks, preceded by a count specifying the number of blocks in the list.

[0295] FIGS. 16A-16B illustrate examples of server attributes and their formats.

[0296]FIGS. 17A and 17B illustrate examples of HBA attributes and their formats. The “Firmware Version” may be identical to the operational firmware version. The number of ports reported for an HBA made by Emulex may be 1. An Emulex dual-channel HBA may appear to the FC-RMAPI 325B as two distinct HBAs 112, each possessing a single port. “OperationalFirmwareName” is an operation firmware on an HBA made by Emulex. “SLI-1FirmwareName” is an SLI-1 overlay software on an Emulex HBA. “SLI-2FirmwareName” is an SLI-1I overlay software on an Emulex HBA. The “IEEEAddress” is an address of an HBA 112. The “BootBiosState” is a current state (enabled/disabled) of the Boot Bios software, if currently present on an HBA 112. The “PlatformName” (also called the Host Name) refers to a GS-4 HBA configuration server.

[0297]FIG. 18 illustrates examples of port attributes and their formats.

[0298]FIG. 19 illustrates examples of port statistics and their formats.

[0299]FIG. 20 illustrates examples of port FCP attributes.

[0300]FIG. 21 illustrates examples of FC-3 management attributes.

[0301] FIGS. 23A-23E illustrate one embodiment of a software resource attribute and its fields.

[0302] Appendix A: FC-RMAPI

[0303] Pages 1-5 of Appendix A list data types and structure definitions that may be used by FC-RMAPI functions.

[0304] Pages 6-25 of Appendix A provide examples of RMAPI functions/commands, their arguments and their return values.

[0305] Appendix B: FC-MI

[0306] Appendix B is the Fibre Channel Methodologies for Interconnects (FC-MI) Attributes specification Rev 1.8.

[0307] CT IUs

[0308] Transfer lengths described herein may be in bytes. The total transfer length for all CT Request, Accept, and Reject CT_IUs may be in a multiples of 4 bytes. As defined in the FC-GS Specification, the lengths of the Basic Preamble and the Additional Preamble are a multiple of 4 bytes.

[0309] As defined herein, the lengths of all CT Requests' Additional Information fields may be a multiple of 4 bytes. All Attribute Blocks, Statistics Blocks, and other entities that make up the Additional Information fields may be defined to have a length that is a multiple of 4 bytes. For each ASCII parameter, the string may be null-terminated, and additional padding nulls may be added to meet the “4 byte multiple” requirement, if necessary.

[0310] Basic Preamble

[0311] In the Basic Preamble, all fields and bits not described may be reserved and may be set to 0.

[0312] Command (Request CT IU)

[0313] Revision Field: a value of 0x02 may be used to indicate compliance with FC-GS-3 revision 7.01.

[0314] IN_ID: A value of 0 may be used.

[0315] GS_Type: A value of 1x0A may be used to indicate Vendor-Unique (e.g., Emulex) Management Services.

[0316] GS_Subtype: A value of 0x10 may be used to indicate the HBA Management Service.

[0317] Options Field:

[0318] Bit 7: Exchange Mapping: A value of 0 may be used to indicate Synchronous Mode.

[0319] Bit 6: Partial Response: A value of 0 may be used to indicate “unspecified.”

[0320] Bit 5: Extended Preamble Present: A value of 1 may be used to indicate extended CT_IU preamble is present.

[0321] Command/Response Code: may be a vendor-unique FC-CT Command Code, as shown in FIG. 24. FIG. 24 illustrates examples of vendor-unique FC-CT Command codes.

[0322] Maximum Size: In one embodiment, a 16-bit value describing the maximum size (size of allocated response buffer) of the Accept CT_IU. The maximum size may be the total size of the CT_IU, including the Basic Preamble, the Extended Preamble, and the Additional Information. The maximum size may be a multiple of 4 bytes. The IOCTL system may impose a 64 kb maximum transfer length.

[0323] Response (Accept CT IU)

[0324] All fields may be as described in FC-GS-3 revision 7.01. In addition, there may be a Vendor-Unique Field.

[0325] Extended Preamble

[0326] Authenticated CT may be used to implement a level of security. This may imply the use of the extended CT_IU preamble.

[0327] Request CT IU

[0328] The CT Command (FIGS. 15A and 24) may be carried in the Request CT_IU Additional Information field. For the purpose of describing CT Commands, this field may be further divided into two parts: the Command Block and the Command Data Field. Command Blocks may be designed according to the following principles:

[0329] Command Blocks may be between 1 and 8 words in length.

[0330] Command Block elements may be aligned on longword boundaries. An exception may be HBA Identifiers and Port Identifiers, which are aligned at 8-word boundaries.

[0331] All Command Blocks may contain a Vendor_OUI (IEEE Organizationally Unique Identifier) in the first word (word 0). The OUI assigned to Emulex is 1x000000C9.

[0332] Some commands may not use parameters. These commands may use the 1-word Nominal Command Block form, which contains only the Vendor_OUI.

[0333] Some commands may use a control word called the Command Control Word (CCW). When present, the Command Control Word is in word 1.

[0334] Some commands may require an additional word for control parameters, which is called the Command-Specific Parameter. When present, the Command-Specific Parameter is in word 2.

[0335] Some commands may send a variable length block of data to the server in a field called the Command Data Field. All Command Data Field structures may be self-identifying as to Type, Length, and Count. Therefore, no data length parameter is necessary in the Command Block.

[0336] Certain commands may use a set of Port Identifiers. These parameters may be 8 bytes in length each. To keep them aligned to 8-byte boundaries, the appropriate Command Blocks may be padded with reserved words, as necessary. The Port Identifiers are contained in words 2-5 in some commands, and in words 4-7 in others.

[0337] FIGS. 25-27 illustrate examples of Common Transport (CT) Command Block formats.

[0338] Proxy/Object Port (or HBA) Identifiers

[0339] There may be times when it is not possible for the client 102 to send a request to a desired HBA 112. In such situations, the client 102 may be able to use a proxy port (or HBA) as the recipient of the CT request. The client 102 may know the WWPN of a proxy port (or HBA) to receive and execute the request on behalf of the caller. To convey this information, the request may contain two parameters: the “Proxy Port Identifier” and the “Object Port Identifier” (or “Proxy HBA Identifier” and the “Object HBA Identifier”).

[0340] However, some requests, such as “Get Server Attributes” and “Set Server Attributes,” do not need two identifiers. For these commands, only the Object Port Identifier (or Object HBA Identifier) needs to be contained in the request.

[0341] For those commands that do contain the two identifiers, the client 102 will generally send the request to the desired Object Port (or Object HBA) and set the Proxy Port Identifier (or Proxy HBA Identifier) to 0. However, if the client 102 chooses to send the request to a proxy port (or HBA), the client 102 will provide a valid non-zero Proxy Port Identifier (or Proxy HBA Identifier).

[0342] In the Request CT_IU, each Port Identifier (or HBA Identifier), when present, may be the eight-byte WWPN.

[0343] Client/Server HBA Identifiers

[0344] For the file transfer protocol, some mechanism may be used to tag individual Requests. In the Request CT_IU, each HBA Identifier, when present, may be the eight-byte WWPN.

[0345] Accept CT IU

[0346] If the server 110 is able to successfully complete a CT Request, the server 110 sends an Accept CT_IU, in response, to the client 102. The response data may be carried in the Accept CT_IU Additional Information field. For the purpose of describing CT Accepts, this field may be further divided into two parts: the Response Block and the Response Data Field. CT Accept blocks may be designed according to the following principles:

[0347] Response Blocks may be between 1 and 8 words in length.

[0348] No elements may be aligned at better than longword boundaries.

[0349] Response Blocks may not mirror their corresponding Command Blocks.

[0350] All Response Blocks may contain a Vendor_OUI in the first word (word 0).

[0351] The Nominal Response Block may comprise solely of the Vendor_OUI.

[0352] Reject CT IU

[0353] Standard Reject Codes

[0354] If the server 110 is unable to perform a requested operation, the server 110 sends a Reject CT_IU to the client 102. All standard FC-GS-3 Reason Codes may be supported. Most of these Reason Codes are used for protocol or physical errors, such as Logical Error, Invalid CT_IU Size, Logical Busy, and Protocol Error. Other Reason Codes include:

[0355] Code Description of Reason Code

[0356] 0x01 Invalid Command Code

[0357] Returned if the Command Code is not a valid vendor-unique management command.

[0358] 0x09 Unable to Perform Command Request

[0359] Returned if there is an error processing a supported Command Code. The Explanation field is as follows:

[0360] Code Description of Reason Code Explanation

[0361] 0x00 No Additional Explanation

[0362] 0x10 Invalid HBA Identifier

[0363] 0x11 HBA Attribute Block Contains Multiple Attributes of the Same Type

[0364] 0x12 Invalid HBA Attribute Block Length

[0365] 0x13 Invalid HBA Attribute

[0366] 0x20 Invalid Port Identifier

[0367] 0x21 Port Attribute Block Contains Multiple Attributes of the Same Type

[0368] 0x22 Invalid Port Attribute Block Length

[0369] 0x23 Invalid Port Attribute

[0370] 0x30 Invalid Host Identifier

[0371] 0x31 Server Attribute Block Contains Multiple Attributes of the Same Type

[0372] 0x32 Invalid Server Attribute Block Length

[0373] 0x33 Invalid Server Attribute

[0374] 1x0B Command Not Supported

[0375] Vendor-Unique Reject Codes

[0376] If the server 110 generates one of the vendor-unique reject codes described herein, the server 110 shall set the Reason Code to 0xFF, meaning Vendor-Unique Error; the Reason Code Explanation to 0, meaning No Additional Explanation; and the Vendor Unique field to the appropriate value.

[0377]FIG. 28 lists examples of CT Vendor-Unique Reject Reason Codes.

[0378] It is possible for all remote CT Operations to fail due to a hardware error on either the local HBA 103 or the remote HBA 110. In addition, certain commands have other command-specific error codes.

[0379] FIGS. 29A-29B lists examples of CT vendor-unique reason codes for command-specific errors.

[0380] Mailbox Error Status

[0381] There may be cases where a mailbox (MBX) Command fails on the server 110 and is well known to the client 102, and the MBX Response is needed. One example is the Run HBA Diagnostic Command, with the RUN_BIU_DIAG sub-code. In these cases, the Reject Reason Code may be MBX_ERR. The actual MBX Response data may be placed in the Reject Additional Information field.

[0382] There may be other cases in which the server 110 can evaluate the MBX error, and return to the client 102 a status (Reject Reason Code) that is isolated from the underlying MBX command. The Reject Reason Code may give the client 102 sufficient information. Examples include the numerous MBX error codes possible for the flash programming operations. The client 102 may not care, for example, if the MBX Command was LOAD_SM or DOWNLOAD, or if the MBX Status was Erase Flash Failure or Program Flash Failure. The Reject Reason Code is FLASH_ERROR. However, in such a case, the actual MBX Response data may also be placed in the Reject Additional Information field, according to the format defined below. The full details of the error are available to the client 102, in case the Application or System Administrator needs the details.

[0383] Reject Additional Information

[0384] Certain Vendor-Unique Reject Codes may require the Reject Additional Information Field to return more information to the client 102.

[0385]FIG. 30 illustrates one embodiment of the CT Reject Additional Information Field. The Additional Information Type field uniquely identifies Reject Additional Information types.

[0386] Type Description

[0387] 0x0001 Mailbox Response

[0388] others Reserved

[0389] The Additional Information Field Length field indicates the total length in bytes of the Additional Information Field. The total length may be a multiple of 4 bytes and includes the Type, Length, and Data fields.

[0390] The Data Field contains the additional information payload. The Data Field may be at least 4 bytes in length and the length may be a multiple of 4. The maximum length may be 256 bytes. Fill bytes may be added if necessary.

[0391] Reject Additional Information: Mailbox Response

[0392] When a MBX Command fails on a remote server 110, the MBX Response is placed in the Reject CT_IU Additional Information field, as shown in FIG. 31.

[0393] Additional Information Type: 1x0001

[0394] The Additional Information Field Length field indicates the total length in bytes of the Additional Information Field. The total length may be a multiple of 4 bytes and includes the Type, Length, and Data fields.

[0395] The Data Field contains the MBX Response.

[0396] Port Statistics

[0397] FDMI does not address the retrieval of port statistics. The FC RMAPI 325B may have a vendor-unique method for handling port statistics.

[0398] From the client's perspective, there may be only two operations applicable to port statistics: retrieval and reset. A specific FC-CT Command is provided to reset statistics: Reset Port Statistics (RPST).

[0399] For retrieval, it is convenient to handle port statistics much like attributes. The following description outlines the data structures applicable to port statistics.

[0400]FIG. 32 illustrates one embodiment of a general format that may be used for all port statistics.

[0401] A Port Statistic Entry Type field uniquely identifies each individual statistic.

[0402] A Port Statistic Entry Length field indicates the total length in bytes of the Port Statistic Entry. The total length may be a multiple of 4 and includes the Type, Length, and Value fields.

[0403] A Port Statistic Entry Value field specifies the statistic value. Statistic Values may be Binary Type, and may be either 4 or 8 bytes in length.

[0404]FIG. 33 illustrates one embodiment of a Port Statistics Block entry. The Port Statistics Block may be a fixed or variable-sized entity, which may be constructed similarly to the Port Attributes Block. The Port Statistics Block may contain any or all of the following statistics, in any order.

[0405] A Number of Port Statistic Entries field specifies the number of Port Statistic Entries contained in the block. A value of 0 is valid and shall indicate that no Port Statistic Entries are contained in the block. In this case, the length of the block shall be 4 bytes.

[0406] Each Port Statistic Entry specifies a particular statistic associated with the block. Each Port Statistic Entry follows the general Port Statistic Entry format specified in FIG. 32.

[0407] Software Resource Descriptor (SRD)

[0408] Several CT Command types may manipulate software resources (files) on remote servers 110. For example, Send_Software_Resource sends a file from the client 102 to a server 110. Rename_Software_Resource changes the name of an existing file on a remote server 110. Get_Remote_Resource_List retrieves descriptors of all the resources available on a remote server 110.

[0409] Different CT Commands operate on different numbers of software resources. Using the same three examples, Send_Software_Resource may operate on exactly one file, Rename_Software_Resource may operate on exactly one file but requires two descriptors, and Get_Remote_Resource_List retrieves descriptors for a variable number of resources. These considerations indicate a Software Resource Descriptor design similar to that used for Attributes.

[0410]FIG. 34 illustrates one embodiment of a Software Resource Descriptor (SRD). An SRD Type field identifies the type of SRD. A SRD Length field indicates the total length in bytes of the SRD, including all five fields. A Software Resource Attribute field contains the Software Resource Attribute, which contains bit masks that qualify the resource. A Software Resource Version field contains the Software Resource Version, which is a null-terminated ASCII string, and may be padded if necessary to a length of 20 bytes. A Software Resource Name field contains the Software Resource Name. The Software Resource Name field may be a null-terminated ASCII string, with a maximum size of 256 bytes.

[0411]FIG. 35 illustrates one embodiment of a Software Resource Block (SRB). A Number of SRDs field specifies the number of SRDs contained in the SRB. A value of 0 may be illegal and may be considered to be an error. The maximum number is variable and may be limited by the implementation. No limit is imposed by this specification.

[0412] SRD n: Each SRD may describe exactly one Software Resource.

[0413] The Software Resource Attribute may be a 64-bit field that identifies software and hardware types of a resource or resources. When used to describe a specific resource, the Software Resource Attribute is part of the resource's Software Resource Block (SRB). The Software Resource Attribute appears in this context in several CT Commands, such as Send_Software_Resouce and Delete_Remote_Resource.

[0414] When used to describe a set of resources, the Software Resource Attribute appears as a parameter in the CT Command itself, as in Get_Remote_Resource_List.

[0415] Command (Request) and Response (Accept) details

[0416] In the command and response blocks described below, the Additional Information field is shown, and the Basic Preamble and Extended Preamble are not shown. The terms “Command” and “Response” are used here to mean the Request CT_IU Additional Information field, and the Accept CT_IU Additional Information field. For error responses, a Reject CT_IU is returned, rather than an Accept CT_IU.

[0417] Also, all Command and Response Blocks contain a Vendor_OUI (IEEE Organizationally Unique Identifier) in the first word (word 0). In this section, the Vendor_OUI is shown in the Command and Response Blocks.

[0418] Get Attributes Commands

[0419] Get Server Attributes (GSAT)

[0420] FIGS. 36A-36B illustrate examples of a Get Server Attributes Command and a Get Server Attributes Response. The Get Server Attributes command instructs the server 110 to return its Server Attributes Block (FIGS. 16A-16B) to the client 102. The GSAT command may not be HBA- or port-specific, so the GSAT command may not need proxy identifiers.

[0421] The GSAT command may not require parameters; the Command comprises the Nominal Command Block.

[0422] The GSAT response may comprise a Nominal Response Block followed by the Server Attribute Block. Generally, but not necessarily, the returned block will contain all the applicable attributes.

[0423] Get HBA Attributes (GHAT)

[0424] FIGS. 37A-37B illustrate examples of a Get HBA Attributes Command and a Get HBA Attributes Response. The Get HBA Attributes command instructs the server 110 to return the Object HBA's HBA Attribute Block (see FIGS. 17A-17B) to the client 102.

[0425] The GHAT command may be HBA-specific, so the GHAT command may contain the Object HBA Identifier and the Proxy HBA Identifier. The GHAT command contains two parameters: the Object HBA Identifier, and the Proxy HBA Identifier.

[0426] The GHAT response comprises the Nominal Response Block followed by the HBA Attribute Block. Generally, but not necessarily, the returned block will contain all the applicable attributes.

[0427] Get Port Attributes (GPAT)

[0428] FIGS. 38A-38B illustrate examples of a Get Port Attributes Command and a Get Port Attributes Response.

[0429] The Get Port Attributes command instructs the Object Server 110 to return the Object Port's Port Attribute Block (see FIG. 18) to the client 102.

[0430] The GPAT command may be Port-specific, so the GPAT command contains the Object Port Identifier and the Proxy Port Identifier. The GPAT command contains two parameters: the Object Port Identifier, and the Proxy Port Identifier.

[0431] The GPAT response comprises the Nominal Response Block followed by the Port Attribute Block. Generally, but not necessarily, the returned block will contain all the applicable attributes.

[0432] Get Driver Attributes (GDAT)

[0433] FIGS. 39A-39B illustrate examples of a Get Driver Attributes Command and a Get Driver Attributes Response. The Get Driver Attributes command instructs the Object Server 110 to return a Driver Attribute Block (not shown) to the client 112. The GDAT command may not be HBA- or port-specific, so the GDAT command needs no proxy identifiers. The GDAT command may not require parameters; the Request may comprise the Nominal Command Block.

[0434] The GDAT response comprises the Nominal Response Block followed by a Driver Attribute Block. Generally, but not necessarily, the returned block will contain all the applicable attributes.

[0435] Get Port Statistics (GPST)

[0436] FIGS. 40A-40B illustrate examples of a Get Port Statistics Command and a Get Port Statistics Response. The Get Port Statistics command instructs the Object Server 110 to return the Object Port's Port Statistics Block to the client 102. The GPST command may be port specific, so the GPST command may contain the Object Port Identifier and the Proxy Port Identifier. The GPST command may contain two parameters: the Object Port Identifier, and the Proxy Port Identifier.

[0437] The GPST response may comprise the Nominal Response Block followed by the Port Statistics Block. Generally, but not necessarily, the returned block will contain all the applicable statistics.

[0438] Set Server Attributes (SSAT)

[0439] FIGS. 41A-41B illustrate examples of a Set Server Attributes Command and a Set Server Attributes Response. The Set Server Attributes command instructs the Object Server 110 to register the attributes contained in the Server Attributes Block. The SSAT command may not be HBA- or port-specific, so the SSAT command may not need proxy identifiers.

[0440] The SSAT command contains a Server Attributes Block, which specifies the attribute(s) to register. One or more attributes may be specified in the attributes block, and registered with a single command. Zero attributes in the block may be an error.

[0441] The SSAT response comprises of the Nominal Response Block.

[0442] Set HBA Attributes (SHAT)

[0443] FIGS. 42A-42B illustrate examples of a Set HBA Attributes Command and a Set HBA Attributes Response. The Set HBA Attributes command instructs the Object Server 110 to register the attributes contained in the HBA Attributes Block.

[0444] The SHAT command may be HBA-specific, so the SHAT command contains the Object HBA Identifier and the Proxy HBA Identifier. The SHAT command contains an HBA Attributes Block, which specifies the attribute(s) to register. One or more attributes may be specified in the attribute block, and registered with a single command. Zero attributes in the block may be an error.

[0445] The SHAT response comprises the Nominal Response Block.

[0446] Set Port Attributes (SPAT)

[0447] FIGS. 43A-43B illustrate examples of a Set Port Attributes Command and a Set Port Attributes Response. The Set Port Attributes command instructs the Object Server 110 to register the attributes contained in the Port Attributes Block. The SPAT command may be port-specific, so the SPAT command contains the Object Port Identifier and the Proxy Port Identifier. The SPAT command contains a Port Attributes Block, which specifies the attribute(s) to register. One or more attributes may be specified in the attribute block, and registered with a single command. Zero attributes in the block may be an error.

[0448] The SPAT response comprises the Nominal Response Block.

[0449] Set Driver Attributes (SDAT)

[0450] FIGS. 44A-44B illustrate examples of a Set Driver Attributes Command and a Set Driver Attributes Response. The Set Driver Attributes command instructs the Object Server 110 to register the attributes contained in the Driver Attributes Block. The SDAT command may not be HBA- or port-specific, so the SDAT command may not need proxy identifiers. The SDAT command contains a Driver Attributes Block, which specifies the attribute(s) to register. One or more attributes may be specified in the attribute block, and registered with a single command. Zero attributes in the block may be an error.

[0451] The SDAT response may comprise the Nominal Response Block.

[0452] Reset Port Statistics (RPST)

[0453] FIGS. 45A-45B illustrate examples of a Reset Port Statistics Command and a Reset Port Statistics Response. The Reset Port Statistics command instructs the Object Server 110 to re-initialize the Object Port's statistics. The RPST command may be port-specific, so the RPST command may contain the Object Port Identifier and the Proxy Port Identifier. The RPST command contains two parameters: the Object Port Identifier, and the Proxy Port Identifier.

[0454] The RPST response may comprise the Nominal Response Block.

[0455] Verify Firmware (VFW)

[0456] FIGS. 46A-46B illustrate examples of a Verify Firmware Command and a Verify Firmware Response. The Verify Firmware command instructs the Object Server 110 to verify that the specified firmware image resource exists, that the firmware image resource is a correct type for the specified HBA, and that the firmware image resource has a valid internal format.

[0457] The VFW command may be an HBA-specific, so the VFW command contains the Object HBA Identifier and the Proxy HBA Identifier. The VFW command may contain the following parameters: Object HBA Identifier, Proxy HBA Identifier, and the remote firmware resource SRD.

[0458] The VFW response comprises the Nominal Response Block. Error conditions are reported with a Reject CT_IU.

[0459] Download Firmware (DFW)

[0460] FIGS. 47A-47B illustrate examples of a Download Firmware Command and a Download Firmware Response. The Download Firmware command instructs the Object Server 110 to download the specified firmware image resource into the specified HBA 112. The DFW command may be HBA-specific, so the DFW command contains the Object HBA Identifier and the Proxy HBA Identifier. The DFW command contains the following parameters: Command Control Word, Object HBA Identifier, Proxy HBA Identifier, and the remote firmware resource SRD.

[0461] The DFW response comprises the Nominal Response Block. Error conditions are reported with a Reject CT_IU.

[0462] In the Download Firmware (DFW) Command, a description of Word 1, Bit (0) may be (Command Control Word) Reset After Download. Specifically, after the successful download, the port may be reset in Normal mode, and the driver re-initializes.

[0463] Upgrade Firmware (UFW)

[0464] FIGS. 48A-48B illustrate examples of an Upgrade Firmware Command and an Upgrade Firmware Response. The Upgrade Firmware command provides a single-command mechanism for a client application 102 to cause a firmware image resource on a specific server 103 or 110 to be downloaded into a specific HBA 112 on a (potentially different) specific server 110.

[0465] The two servers are not necessarily the same server. The Upgrade Firmware command is transmitted by the client application 102 to the server 103 or 110 containing the necessary firmware image resource. This server 103 or 110 is called the Resource Server. The Resource Server 103 or 110 then transmits the resource, via the Send Software Resource command, to the server 110 containing the HBA 112 to be upgraded. This server 110 is called the Object Server. Finally, the Resource Server 103 or 110 transmits a Download Firmware Command to the Object Server 110.

[0466] If the Resource Server 103 or 110 and the Object Server 110 are the same server, the additional steps outlined above are skipped. In this case the Upgrade Firmware command acts like a Download Firmware command.

[0467] Since the underlying DFW command may be HBA-specific, and uses the Object HBA Identifier and the Proxy HBA Identifier, these two identifiers are required in the UFW Command. Since the UFW Command itself is not HBA-specific, UFW Command does not require a proxy. Therefore the UFW Command contains three HBA Identifiers: the Resource Server HBA Identifier, the Object Server Object HBA Identifier, and the Object Server Proxy HBA Identifier.

[0468] In addition, the UFW command may contain the Command Control Word and the firmware resource SRD.

[0469] The UFW response comprises the Nominal Response Block. Error conditions are reported with a Reject CT_IU.

[0470] For the Download Firmware (DFW) Command, Word 1, Bit (0) may have a (Command Control Word) Reset After Download. After the successful download, the port is reset in Normal mode, and the driver re-initialized.

[0471] Reset HBA (RES)

[0472] FIGS. 49A-49C illustrate examples of a Reset HBA Command, a Reset HBA Response and Reset HBA Command details. The Reset HBA command instructs the Object Server 110 to perform the indicated reset action on the specified HBA 112. The RES command may be HBA-specific, so the RES command contains the Object HBA Identifier and the Proxy HBA Identifier. The RES command contains the following parameters: Command Control Word, Object HBA Identifier, and Proxy HBA Identifier.

[0473] The RES response comprises the Nominal Response Block. Error conditions are reported with a Reject CT_IU.

[0474] Run HBA Diagnostic (RHD)

[0475] FIGS. 50A-50C illustrate examples of a Run HBA Diagnostic Command, a Run HBA Diagnostic Response and Run HBA Diagnostic command details. The Run HBA Diagnostic command instructs the Object Server 110 to perform the indicated diagnostic on the Object HBA 112. The RHD command may be HBA-specific, so the RHD command contains the Object HBA Identifier and the Proxy HBA Identifier. The RHD command contains the following parameters: the Command Control Word, the Object HBA Identifier, and the Proxy HBA Identifier.

[0476] The RHD response comprises the Nominal Response Block. Error conditions are reported with a Reject CT_IU.

[0477] Get Remote Resource List (GRRL)

[0478] FIGS. 51A-51C illustrate examples of a Get Remote Resource List Command, a Get Remote Resource List Response and Get Remote Resource List command details. The Get Remote Resource List Command is used to return the Software Resource Descriptors (SRD) for all remote resources that match the specifications in the command. The GRRL command may not be HBA- or port-specific, so the GRRL command may not need proxy identifiers. The GRRL command contains two parameters: the Command Control Word and the Software Resource Attribute.

[0479] The GRRL response comprises the Nominal Response Block followed by the variable-length SRD List.

[0480] Get Remote Resource Info (GRRI)

[0481] FIGS. 52A-52B illustrate examples of a Get Remote Resource Info Command and a Get Remote Resource Info Response. The Get Remote Resource Info Command is used to return the Software Resource Descriptor (SRD) for the resource named in the command. The GRRI command may not be HBA- or port-specific, so the GRRI command may not need proxy identifiers.

[0482] In one configuration, the GRRI command contains one SRD. This SRD may be incomplete, containing only a Software Resource Name, or complete, containing both a Name and a Type. If the SRD is incomplete, the server 110 searches for a resource matching the name only. If the SRD is complete, the server 110 searches for a resource matching both the Name and the Type. In either case, if a matching Resource is found, its complete SRD is returned.

[0483] The GRRI response comprises the Nominal Response Block followed by the variable-length SRD.

[0484] Send Software Resource (SSR)

[0485] FIGS. 53A-53C illustrate examples of a Send Software Resource Command, a Send Software Resource Response and Send Software Resource Command Details. The Send Software Resource Command is used to copy a software resource (file) from a client system 103 to a server system 110. The SSR command may not be HBA- or port-specific, so the SRR command may not need proxy identifiers.

[0486] The destination resource filename is specified in the CT Request. It is contained in the Software Resource Descriptor (SRD) contained in the SSR Data Field. The destination resource pathname is specified with the appropriate Server Attribute, and may not be included in the CT Request.

[0487] The SendMgmtCommand system may have a maximum I/O size, currently expected to be 64 Kb. Firmware files are much larger than this. Thus, the client 102 may fragment the file and send it in pieces, and the server 110 may reassemble the file. This task may be simplified somewhat if only Synchronous Mode CT is used, but the client 102 and agent 104 may also implement a simple fragment-level protocol.

[0488] Some mechanism may tag individual SSR Requests, so a server 110 can handle more than one client 102 sending more than one file to the server 110 at the same time. The client and server HBA Identifiers will be included in the SSR Request as part of this mechanism.

[0489] Completing this mechanism are a File Transfer Tag and a Fragment Number. These parameters are contained in the Command-Specific Parameter word in the Command Block.

[0490] The SSR command may also make use of the command-specific Command Control Word. A control bit in the CCW indicates whether the SSR Data Field contains an SRD or a resource fragment. Two implications result from this design. First, any particular SSR Request transmits either an SRD, or a Resource Fragment, but not both. Second, a minimum of two SSR Requests is required to transmit a software resource: one to transmit the SRD, and at least one to transmit Resource Fragments.

[0491] The SSR response comprises the Nominal Response Block.

[0492] Delete Remote Resource (DRR)

[0493] FIGS. 54A-54C illustrate examples of a Delete Remote Resource Command, a Delete Remote Resource Response and Delete Remote Resource Command Details. The Delete Remote Resource Command is used to remove a software resource (file) from a remote server 110. The DRR command may not be HBA- or port-specific, so the DRR command may not needs proxy identifiers.

[0494] The resource filename is specified in the CT Request. The resource filename is contained in the Software Resource Descriptor (SRD) contained in the DRR Data Field. For this command, it is recommended that the SRD contain a null Software Resource Attribute field. In any case, the SRA field is ignored.

[0495] The resource pathname is specified with the appropriate Server Attribute, and is not included in the CT Request.

[0496] The DRR response comprises the Nominal Response Block.

[0497] Rename Remote Resource (RRR)

[0498] FIGS. 55A-55C illustrate examples of a Rename Remote Resource Command, a Rename Remote Resource Response and Rename Remote Resource Command Details. The Rename Remote Resource Command is used to rename a software resource (file) on a remote server 110. The RRR command may not be HBA- or port-specific, so the RRR command may not need proxy identifiers.

[0499] The current and new resource filenames are specified in the CT Request. They are contained in the two Software Resource Descriptors (SRD) contained in the RRR Request. For this command, it is recommended that each SRD contain a null Software Resource Attribute field. In any case, each SRA field is ignored.

[0500] The RRR response comprises the Nominal Response Block.

[0501] Test Transmit And Receive (TEST)

[0502]FIGS. 56A and 56B illustrate examples of a Test Transmit and Receive Command and a Test Transmit and Receive Response. The Test command provides a mechanism to test the remote management command/response system and the data path.

[0503] In addition to the Vendor_OUI, the Test command block comprises the requested CT Command Byte Count, the requested CT Response Byte Count, the Test Command Reference Number, and a Data Field. When the Command is processed by the server 110, the server 110 builds and transmits a response that contains the complemented data field. Note that the Command Byte Count and the Response Byte Count are not required to be equal. When the Response is processed by the client application 102, the data field can be checked for data integrity.

[0504] Query HBA (QHBA)

[0505] FIGS. 57A-57C illustrate examples of Query HBA Response details, a Query HBA Command and a Query HBA Response. The Query HBA Command may be used for two purposes. First, the Query HBA command may be used to determine if a remote HBA 112 is manageable, i.e., if the HBA 112 is installed in a server 110 that is running a remote management agent 104 and/or client 102. Second, Query HBA command may be used to determine the status of a Download Firmware or Reset HBA Command.

[0506] The QHBA command may be HBA-specific, so it contains the Object HBA Identifier and the Proxy HBA Identifier. The QHBA command may not require parameters. The Request may comprise the Nominal Command Block.

[0507] The QHBA response comprises the Nominal Response Block, followed by the Status Word.

[0508] For determining if a remote HBA 112 is manageable, the Status Word may not be applicable. The presence or absence of the response is applicable as follows: if the response arrives within the time-out period, the remote HBA 112 is manageable; if no response arrives within the time-out period, the remote HBA 112 is not manageable.

[0509] For checking the status of a Download Firmware or Reset HBA Command, the Status Word is defined as follows. The “Complete” Bits implies success. If there is an error on the operation, the Query Command will get a Reject, not an Accept.

[0510] A number of embodiments have been described. Nevertheless, it will be understood that various modifications may be made. For example, there may be more than one remote manager 103 in the SAN 50. Accordingly, other embodiments are within the scope of the following claims. 

What is claimed is:
 1. A system with a Fibre Channel network, the system comprising: a first host bus adapter coupled to a first port of the Fibre Channel network; and a remote manager associated with a second host bus adapter coupled to a second port of the Fibre Channel network, the remote manager being operable to send a command from the second host bus adapter to the first host bus adapter via a Common Transport layer of the Fibre Channel network.
 2. The system of claim 1, wherein the first host bus adapter is installed in a server.
 3. The system of claim 2, further comprising a third host bus adapter installed in the server, the third host adapter being coupled to a third Fibre Channel port, wherein the command specifies an object port address for the first host bus adapter and a proxy port address for the third host bus adapter.
 4. The system of claim 1, further comprising at least one storage device coupled to a third port of the Fibre Channel network.
 5. The system of claim 1, further comprising at least one network switch.
 6. The system of claim 1, wherein the first host bus adapter is operable to perform the command without involving an operating system of a server in which the first host bus adapter is installed.
 7. The system of claim 1, wherein the remote manager is operable to send a command to the second host bus adapter, and the second host bus adapter is operable to respond to the command. Commands
 8. The system of claim 1, wherein the command specifies an address of a memory buffer where data returned by the first host bus adapter is to be stored.
 9. The system of claim 1, wherein the command discovers names and addresses of all host bus adapters coupled to ports of the Fibre Channel network.
 10. The system of claim 1, wherein the command requests a host bus adapter attribute from the first host bus adapter.
 11. The system of claim 1, wherein the command modifies an attribute of the first host bus adapter.
 12. The system of claim 1, wherein the command requests a port attribute from the first port.
 13. The system of claim 1, wherein the command modifies a port attribute of the first port.
 14. The system of claim 1, wherein the command requests a port statistic from the first port.
 15. The system of claim 1, wherein the command resets a port statistic of the first port.
 16. The system of claim 1, wherein the command requests a server attribute from a server coupled to the first host bus adapter.
 17. The system of claim 1, wherein the command modifies a server attribute of a server coupled to the first host bus adapter.
 18. The system of claim 1, wherein the command copies a file to a repository, the repository being accessible by the remote manager.
 19. The system of claim 1, wherein the command verifies whether a firmware file could be successfully downloaded to the first host bus adapter.
 20. The system of claim 1, wherein the command sends a file in a first repository associated with the remote manager to a second repository associated with the first host bus adapter.
 21. The system of claim 20, wherein the file comprises firmware.
 22. The system of claim 20, wherein the file comprises a driver.
 23. The system of claim 1, wherein the command instructs the first host bus adapter to download firmware in a repository associated with the first host bus adapter, the firmware being loaded from the remote manager.
 24. The system of claim 1, wherein the command comprises: copying a firmware file to a first repository, the first repository being accessible by the remote manager; verifying whether the firmware file could be successfully downloaded to the first host bus adapter; sending the firmware file in the first repository associated with the remote manager to a second repository associated with the first host bus adapter; and instructing the first host bus adapter to download firmware in the second repository associated with the first host bus adapter.
 25. The system of claim 1, wherein the command resets operation of the first host bus adapter.
 26. The system of claim 1, wherein the command renames a specified file in a repository on a server associated with the first host bus adapter.
 27. The system of claim 1, wherein the command deletes a specified file in a repository on a server associated with the first host bus adapter.
 28. The system of claim 1, wherein the command retrieves a list of file names in a repository associated with the first host bus adapter.
 29. The system of claim 1, wherein the command retrieves mapping between Fibre Channel Protocol (FCP) targets and Small Computer System Interface (SCSI) information.
 30. The system of claim 1, wherein the command retrieves an attribute of a driver associated with the first host bus adapter.
 31. The system of claim 1, wherein the command modifies an attribute of a driver associated with the first host bus adapter.
 32. The system of claim 1, wherein the command retrieves names of all nodes associated with the first host bus adapter for a binding operation.
 33. The system of claim 1, wherein the command adds a persistent binding.
 34. The system of claim 1, wherein the command deletes a persistent binding. RM Client
 35. A software module executable on a computer to send a command from a first host bus adapter to a second host bus adapter via a Common Transport layer of a Fibre Channel network.
 36. The software module of claim 35, comprising a client application, an application programming interface and a library of command functions, wherein the application programming interface allows the client application to access the library of command functions.
 37. The software module of claim 36, wherein the client application comprises a graphical user interface operable to allow a user to manage the client application.
 38. The software module of claim 36, wherein the client application is a web browser.
 39. The software module of claim 36, wherein the client application is a extensible Markup Language (XML) application.
 40. The software module of claim 36, wherein the client application is a Java application.
 41. The software module of claim 36, further comprising a device driver.
 42. The software module of claim 36, further comprising a Simple Network Management Protocol (SNMP) application.
 43. The software module of claim 36, further comprising a Microsoft Management Console.
 44. The software module of claim 36, further comprising an extensible Markup Language (XML) application.
 45. The software module of claim 36, further comprising an extensible Markup Language (XML) parser module.
 46. The software module of claim 36, further comprising an extensible Markup Language (XML) page server module.
 47. The software module of claim 36, further comprising a Java native interface.
 48. The software module of claim 36, further comprising an out-of-band Internet Protocol Ethernet interface.
 49. The software module of claim 35, wherein the command requests a port attribute.
 50. The software module of claim 35, wherein the command modifies a port attribute.
 51. The software module of claim 35, wherein the command requests a port statistic.
 52. The software module of claim 35, wherein the command modifies a port statistic.
 53. The software module of claim 35, wherein the command requests a host bus adapter attribute.
 54. The software module of claim 35, wherein the command modifies a host bus adapter attribute.
 55. The software module of claim 35, wherein the command requests a server attribute.
 56. The software module of claim 35, wherein the command modifies a server attribute.
 57. The software module of claim 35, wherein the command instructs the second host bus adapter to load a firmware file.
 58. The software module of claim 35, wherein the command adds a persistent binding.
 59. The software module of claim 35, wherein the command deletes a persistent binding.
 60. The software module of claim 35, wherein the command sets an address of a host bus adapter.
 61. The software module of claim 35, wherein the command runs a diagnostic test on a host bus adapter. RMAPI
 62. A program interface module at a first computer, the program interface module being operable to allow a client software application to access a library of remote management functions, each remote management function being associated with a Fibre Channel Common Transport command, each Fibre Channel Common Transport command being configured to command a component of a second computer to perform a function, the second computer being in communication with the first computer via a Fibre Channel network.
 63. The program interface module of claim 62, the program interface module being operable to allow a client software application to access a second library of remote management functions, each remote management function in the second library being associated with a Internet Small Computer System Interface (iSCSI) command, each iSCSI command being configured to command a component of a second computer to perform a function.
 64. The program interface module of claim 62, comprising a dynamic link library.
 65. The program interface module of claim 62, wherein the client software application is a Simple Network Management Protocol (SNMP) application.
 66. The program interface module of claim 62, wherein the client software application is a native application.
 67. The program interface module of claim 62, wherein the client software application is a Java application.
 68. The program interface module of claim 62, wherein the client software application is a web browser.
 69. The program interface module of claim 62, wherein the client software application is an extensible Markup Language (XML) application.
 70. The program interface module of claim 62, wherein the client software application is a Microsoft management console.
 71. The program interface module of claim 62, wherein the command discovers names and addresses of all host bus adapters coupled to ports of the Fibre Channel network.
 72. The program interface module of claim 62, wherein the command requests a host bus adapter attribute from a host bus adapter of the second computer.
 73. The program interface module of claim 62, wherein the command modifies an attribute of a host bus adapter of the second computer.
 74. The program interface module of claim 62, wherein the command requests a port attribute from a port of the second computer.
 75. The program interface module of claim 62, wherein the command modifies a port attribute a port of the second computer.
 76. The program interface module of claim 62, wherein the command requests a port statistic from a port of the second computer.
 77. The program interface module of claim 62, wherein the command resets a port statistic of a port of the second computer.
 78. The program interface module of claim 62, wherein the command requests a server attribute of the second computer.
 79. The program interface module of claim 62, wherein the command modifies a server attribute of the second computer.
 80. The program interface module of claim 62, wherein the command sends a firmware file in a first repository associated with the first computer to a second repository associated with the second computer.
 81. The program interface module of claim 62, wherein the command instructs a host bus adapter of the second computer to download firmware in a repository associated with the first host bus adapter, the firmware being loaded from the first computer.
 82. The program interface module of claim 62, wherein the command comprises: copying a firmware file to a first repository, the first repository being accessible by the first computer; verifying whether the firmware file could be successfully downloaded to a host bus adapter of the second computer; sending the firmware file in the first repository associated with the first computer to a second repository associated with the second computer; and instructing the host bus adapter to download firmware in the second repository associated with the host bus adapter.
 83. The program interface module of claim 62, wherein the command resets operation of a host bus adapter of the second computer.
 84. The program interface module of claim 62, wherein the command renames a specified file in a repository in the second computer.
 85. The program interface module of claim 62, wherein the command deletes a specified file in a repository in the second computer.
 86. The program interface module of claim 62, wherein the command retrieves a list of file names in a repository in the second computer.
 87. The program interface module of claim 62, wherein the command retrieves mapping between Fibre Channel Protocol (FCP) targets and Small Computer System Interface (SCSI) information.
 88. The program interface module of claim 62, wherein the command retrieves an attribute of a driver associated with a host bus adapter of the second computer.
 89. The program interface module of claim 62, wherein the command modifies an attribute of a driver associated with a host bus adapter of the second computer.
 90. The program interface module of claim 62, wherein the command retrieves names of all nodes associated with a host bus adapter of the second computer for a binding operation.
 91. The program interface module of claim 62, wherein the command adds a persistent binding.
 92. The program interface module of claim 62, wherein the command deletes a persistent binding. iSCSI
 93. A system with an Internet Small Computer System Interface (ISCSI) network, the system comprising: a first host bus adapter coupled to a first port of the iSCSI network; and a remote manager associated with a second host bus adapter coupled to a second port of the iSCSI network, the remote manager being operable to send a command from the second host bus adapter to the first host bus adapter in Internet Protocol packets via the iSCSI network. Attribute Data Structure
 94. A data structure comprising an attribute type field, an attribute length field, and an attribute datum field, the data structure describing an attribute of a component in a storage area network, the attribute data structure being configured to be transmitted from a first node to a second node of a Fibre Channel network via a Fibre Channel Common Transport layer.
 95. The attribute data structure of claim 94, wherein the component is a host bus adapter.
 96. The attribute data structure of claim 94, wherein the component is a host bus adapter driver.
 97. The attribute data structure of claim 94, wherein the component is a server.
 98. The attribute data structure of claim 94, wherein the component is a port.
 99. The attribute data structure of claim 94, wherein the component is a storage device. RMAPI function/command structures, FC-CT command/functions, CT IU packet structures, IOCTL routines
 100. A Fibre Channel Common Transport command configured to be sent from a first Fibre Channel port to a second Fibre Channel port, the Fibre Channel Common Transport command instructing a component in communication with the second Fibre Channel port to perform a function.
 101. The Fibre Channel Common Transport command of claim 100, wherein the component in communication with the second Fibre Channel port is a host bus adapter.
 102. The Fibre Channel Common Transport command of claim 100, wherein the component in communication with the second Fibre Channel port is a server.
 103. The Fibre Channel Common Transport command of claim 100, wherein the component in communication with the second Fibre Channel port is a storage device.
 104. The Fibre Channel Common Transport command of claim 100, wherein the function comprises sending a host bus adapter parameter from the second Fibre Channel port to the first Fibre Channel port.
 105. A command structure configured to be sent from a first computer at a first Fibre Channel port to a second computer at a second Fibre Channel port, the command structure comprising: an object port address that specifies where the command is to be sent; a proxy port address that specifies a backup address where the command is to be sent; a pointer; and a return value.
 106. A command structure configured to instruct a first host bus adapter to send firmware to a second host bus adapter in a Fibre Channel storage area network.
 107. A command structure configured to instruct a first host bus adapter to send firmware to a second host bus adapter in a Internet Small Computer System Interface (iSCSI) storage area network.
 108. A command structure configured to discover all host bus adapters in a storage area network coupled to Fibre Channel ports. Repository
 109. A repository comprising a disk-based directory, the repository being operable to store a file to be transferred from a first computer server to a computer second server via a plurality of Fibre Channel Command Transport packets.
 110. The repository of claim 109, wherein the file comprises a host bus adapter firmware.
 111. The repository of claim 109, wherein the file comprises a device driver.
 112. The repository of claim 109, being stored in a storage device of the first computer server.
 113. A repository comprising a disk-based directory at a second computer, the repository being operable to store a file transferred from a first computer to the second computer via a plurality of Fibre Channel Command Transport packets. Agent
 114. A software module operable to communicate with a host bus adapter driver on a server, the software module comprising: a plurality of remote command modules operable to receive commands from remote ports of a storage area network; a kernel operable to dispatch the commands received from the remote command modules to a plurality of protocol managers; and a plurality of management service modules operable to execute the commands.
 115. The software module of claim 114, wherein one of the remote command modules is operable to receive Fibre Channel Common Transport (FC-CT) commands.
 116. The software module of claim 114, wherein one of the remote command modules is operable to receive Internet-Protocol-based Fibre Channel Common Transport (FC-CT) commands.
 117. The software module of claim 114, wherein one of the remote command modules is operable to receive Internet-Protocol-based Simple Network Management Protocol (SNMP) commands.
 118. The software module of claim 114, wherein one of the management service modules comprises a directory server.
 119. The software module of claim 114, wherein one of the management service modules comprises a key server.
 120. The software module of claim 114, wherein one of the management service modules comprises a module operable to authenticate a source of the command. Methods
 121. A method of sending a command to a device in a Fibre Channel network, the method comprising: receiving a user command at a first device in the Fibre Channel network; accessing a Fibre Channel Common Transport command library to identify a Fibre Channel Common Transport command that corresponds to the user command; encapsulating the Fibre Channel Common Transport command in a Common Transport Information Unit Request; and sending the Common Transport Information Unit Request to a second device via the Fibre Channel network.
 122. The method of claim 121, wherein the second device is a server.
 123. The method of claim 121, wherein the second device is a host bus adapter.
 124. The method of claim 121, further comprising checking an authentication code of the Common Transport Information Unit Request.
 125. The method of claim 121, wherein the command discovers names and addresses of all host bus adapters coupled to ports of the Fibre Channel network.
 126. The method of claim 121, wherein the command requests a host bus adapter attribute from the second device.
 127. The method of claim 121, wherein the command modifies a host bus adapter attribute of the second device.
 128. The method of claim 121, wherein the command requests a port attribute from the second device.
 129. The method of claim 121, wherein the command modifies a port attribute of the second device.
 130. The method of claim 121, wherein the command requests a port statistic from the second device.
 131. The method of claim 121, wherein the command resets a port statistic of the second device.
 132. The method of claim 121, wherein the command requests a server attribute from the second device.
 133. The method of claim 121, wherein the command modifies a server attribute of the second device.
 134. The method of claim 121, wherein the command copies a file to a repository, the repository being accessible by the second device.
 135. The method of claim 121, wherein the command sends firmware in a first repository associated with the first device to a second repository associated with the second device.
 136. The method of claim 121, wherein the command instructs the second device to download firmware in a repository associated with the second device, the firmware being loaded from the first device.
 137. The method of claim 121, wherein the command comprises: copying a firmware file to a first repository, the first repository being accessible by the first device; sending the firmware file in the first repository associated with the first device to a second repository associated with the second device; and instructing the second device to download firmware in the second repository associated with the second device.
 138. The method of claim 121, wherein the command resets operation of a host bus adapter of the second device.
 139. The method of claim 121, wherein the command renames a specified file in a repository on a server associated with the second device.
 140. The method of claim 121, wherein the command deletes a specified file in a repository on a server associated with the second device.
 141. The method of claim 121, wherein the command retrieves a list of file names in a repository associated with the second device.
 142. The method of claim 121, wherein the command retrieves mapping between Fibre Channel Protocol (FCP) targets and Small Computer System Interface (SCSI) information.
 143. The method of claim 121, wherein the command retrieves an attribute of a driver associated with the second device.
 144. The method of claim 121, wherein the command modifies an attribute of a driver associated with the second device.
 145. The method of claim 121, wherein the command retrieves names of all nodes associated with the second device for a binding operation.
 146. The method of claim 121, wherein the command adds a persistent binding.
 147. The method of claim 121, wherein the command deletes a persistent binding.
 148. A method of sending a command to a device in a Internet Small Computer Interface (iSCSI) network, the method comprising: receiving a user command at a first device in the iSCSI network; accessing a iSCSI command library to identify an iSCSI command that corresponds to the user command; and sending the iSCSI command to a second device via the iSCSI network.
 149. A method of transferring a firmware file to a remote host bus adapter, the method comprising: importing a firmware file to a local repository; verifying that the firmware file is compatible with the remote adapter that is to receive the firmware file; and sending the firmware file to the remote host adapter via a Fibre Channel Common Transport (FC-CT) layer.
 150. The method of claim 149, further comprising receiving the firmware file at the remote host adapter and copying the firmware file to a repository associated with the remote host bus adapter.
 151. The method of claim 149, further comprising receiving a download file command and installing the firmware file onto the remote host bus adapter.
 152. The method of claim 149, wherein verifying that the firmware file is compatible with a remote adapter that is to receive the file comprises checking a checksum of the file.
 153. The method of claim 149, wherein verifying that the firmware file is compatible with a remote adapter that is to receive the file comprises determining whether a type of the file matches a type of the host bus adapter. 